和往常一样,我也在研究使用PHP的最佳实践,而准备好的语句似乎是我闭上眼睛应该做的事情。所以我开始用我发现的一些例子来做游戏。
运行脚本时出现此错误:
致命错误:调用成员函数
中非对象的bindparam()。
/opt/lampp/htdocs/phpsecurity/preparedstations/插入多绑定参数/插入
第10行的simple method.php
这里是代码。
插入simple method.php
<?php
require_once '../config.php';
$stmt = $db->prepare("INSERT INTO coisas (nome, telefone, bi) VALUES (?, ?, ?)");
$nome = 'Fabio Antunes';
$telefone = 916810641;
$bi = 123093456;
$stmt->bindParam(1, $nome);
$stmt->bindParam(2, $telefone);
$stmt->bindParam(3, $bi);
$stmt->execute();
$stmt->close();
$db->close();
?>
组态PHP
<?php
$server_host = 'localhost';
$server_user = 'root';
$server_password = '';
$server_db = 'PreparedStatements';
$db = new mysqli($server_host, $server_user, $server_password, $server_db);
?>
不知道我在这里做错了什么,这是在php.net上发现的类似例子,为什么不工作?
PS:我认为mysqli连接不是问题所在,因为我已经用它对select-sql命令执行了一些准备好的语句。工作得很好。
编辑
决议和原因。
井在
example
我应该用
bind_param()
查询中的每个值。但多亏了巴特,他用我的代码解决了这个问题。
它在哪里:
$stmt->bindParam(1, $nome);
$stmt->bindParam(2, $telefone);
$stmt->bindParam(3, $bi);
应该是:
$stmt->bind_param("sii", $nome, $telefone, $bi);
现在,对于那些想知道什么是“sii”的人来说。
好吧,把参数绑定到我看到的内容上,它将“$var”绑定到每个问号“?整齐。
所以一个
宾达PARAMP()
我可以同时装订它们,并且正常使用
绑定参数()
要求指定要绑定的数据类型。
我要绑定的第一个值是
$nome
由“s”指定的字符串;
还有其他人
$telefone
和
$bi
是整数,因为他有“i”;
对于这里有类似问题的其他数据类型(从php.net)。
i=整数;
S=字符串;
d=双;
B=BLB;
如果有人作为更好的解释,请张贴或评论。所以我可以提高自己。
谢谢。