我花了一整天的时间试图找出这个问题而没有运气。我已经看到一些问题,其中常量被直接用作参数。我的所有论据都是变量。我错过了一些非常明显的东西吗?
$one = 1;
$two = 2;
$three = 3;
if ( !($stmt = $mysqli->prepare('INSERT INTO test3 (one, two, three) VALUES (?, ?, ?)')) ) {
echo "Prepare failed (".$stmt->errno.") ".$stmt->error."\n";
$stmt->close();
exit();
}
if ( !($stmt->bind_param('iii',$one,$two,$three)) ) {
echo "Failed to bind (".$stmt->errno.") ".$stmt->error;
$stmt->close();
exit();
}
if ( !($stmt->execute) ) {
echo "Execute failed (". $stmt->errno.") ". $stmt->error."\n";
$stmt->close();
exit();
}
编辑:我实际上是在使用bind_param
,但是在尝试了不同的事情之后忘了改回来。代码被复制并粘贴。将bind_value更改回bind_param后,我仍然得到相同的错误。
编辑2:我感觉很愚蠢,我用一个新名字保存了我的php文件,所以我可以简化代码,但是我忘了改变POST方法的url来反映这种变化。所以我现在得到的错误是:Undefined property: mysqli_stmt::$execute
和mysql日志中的相应输出:
42 Connect test@localhost on testdb
42 Prepare [1] INSERT INTO test3 (one, two, three) VALUES (?, ?, ?)
42 Quit
答案 0 :(得分:0)
如果您使用的是mysqli,则必须使用bind_param而不是bind_value:
if ( !($stmt->bind_param('iii',$one,$two,$three)) ) {
echo "Failed to bind (".$stmt->errno.") ".$stmt->error;
$stmt->close();
exit();
}
BindValue仅适用于PDO类。
答案 1 :(得分:0)
在下面的代码中,我添加了一行代码。我有同样的问题并再次检查文档,这解决了我的问题。
$one = 1;
$two = 2;
$three = 3;
// This fixed my problem
$stmt = $mysqli->stmt_init();
if ( !($stmt = $mysqli->prepare('INSERT INTO test3 (one, two, three) VALUES (?, ?, ?)')) ) {
echo "Prepare failed (".$stmt->errno.") ".$stmt->error."\n";
$stmt->close();
exit();
}
if ( !($stmt->bind_param('iii',$one,$two,$three)) ) {
echo "Failed to bind (".$stmt->errno.") ".$stmt->error;
$stmt->close();
exit();
}
if ( !($stmt->execute) ) {
echo "Execute failed (". $stmt->errno.") ". $stmt->error."\n";
$stmt->close();
exit();
}
查看此处的文档http://us.php.net/manual/en/mysqli.stmt-init.php 您还会看到它在mysqli::prepare page
中使用