【发布时间】:2012-04-20 16:32:58
【问题描述】:
我有完全相同的代码在另一台服务器上运行良好:
$mysqli_Cxn = new mysqli($SQL_HOST,$SQL_USER,$SQL_PASS,$SQL_DB);
if($mysqli_Cxn->connect_errno){
echo 'Unable to connect!!';
exit();
}
$userID=12345;
$userFirstName = 'Charley';
$userLocale = 'en_US';
$sql = "UPDATE userProfile SET userFirstName=?, userLocale=? WHERE id=?";
if($stmt = $mysqli_Cxn->prepare($sql)){
if(!$stmt->bind_param('ssi',$userFirstName,$userLocale,$userID)){
echo "<br/><br/>Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;
}
if($stmt->execute()){
totalAffected=$stmt->affected_rows;
if($totalAffected>=1){
echo '<br/><br/>UPDATE OK: Affected rows = '. $totalAffected;
}
}else{
echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}
}
$stmt->close();
该代码给了我以下输出: 执行失败:(1210) mysql_stmt_execute 的参数不正确
如果我改变这两行:
$sql = "UPDATE userProfile SET userFirstName=?, userLocale=? WHERE id=?";
$stmt->bind_param('ssi',$userFirstName,$userLocale,$userID);
到这里:
$sql = "UPDATE userProfile SET userFirstName=?, userLocale='en_US' WHERE id=12345";
$stmt->bind_param('s',$userFirstName);
...然后更新成功,我没有收到任何错误。
有人知道为什么我不能在这段代码中绑定多个参数吗?
我让这段代码在 Centos 4.9、PHP 5.3.3、MySQL 5.0.91/5.0.91-community-log 上完美运行
我需要在我当前的服务器 Centos 6.2、PHP 5.3.10、MySQL 5.0.95-community-log 上运行它
【问题讨论】:
-
为什么这里的第一个参数不同( 'ssi' 和 's' )?这可能是个问题吗?
-
他的意思是,如果他将其更改为接受单个参数,则它可以在多个参数不接受的情况下工作。
-
仅供参考:我 did 重新编译了 PHP+mysqli(至少 5 次),并且我对源文件进行了 md5sum(与此代码工作正常的服务器相比) .唯一非常奇怪的是,我的错误日志中经常出现以下条目“sendmail:未使用正确的有效 GID 运行。sendmail 二进制 setgid 邮件陷阱吗?”...但我确信这是一个完全不同的问题
-
投票并收藏。我找不到任何相关内容,也找不到任何关于 PHP 版本中可能改变 bind_param 工作方式或代码中任何错误的任何可能更改的文档。祝你好运哥们,希望我能帮忙:(期待答案。
-
以防万一这对将来的某人有所帮助...尽管使用了 PDO,但我还是遇到了此错误。就我而言,这是因为我的 PHP 逻辑有缺陷,我无意中在 LIMIT,OFFSET 查询中传递了一个负的 OFFSET。