我有完全相同的代码在另一台服务器上运行良好:
$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
答案 0 :(得分:3)
我做了一些研究,看起来MySQL源代码中的报告错误与您的GCC版本和您使用的优化标记相结合。 如果您无法更改MySQL版本,请尝试使用-fno-strict-aliasing对您的CFLAGS重新编译MySQL。
有关更多详情,请参阅http://bugs.mysql.com/bug.php?id=48284
答案 1 :(得分:1)
关于这个问题的最后说明。
我使用以下配置启动并运行了一台新服务器:
PHP 5.3.10
MySQL 5.1.61-cll
我启用新服务器接受外部连接并在第一台服务器上测试相同的代码(这次将“localhost”替换为我的新服务器的IP)。
当我尝试在查询中使用多个参数时,它给了我完全相同的错误。
最后,我在新服务器上测试了代码(使用多个参数查询),它没有任何问题。
我的逻辑可能已经过时,但我想问题是mysqli的客户端版本:
第一台服务器:
printf("Client library version: %d\n", mysqli_get_client_version());
//Output:
//Client library version: 50095
新服务器:
printf("Client library version: %d\n", mysqli_get_client_version());
//Output:
//Client library version: 50161
所以我可以提出两点建议:
感谢大家的评论/帮助!
PS:我正在使用带CPanel的VPS服务器。我尝试在第一台服务器上使用WHM中的EasyApache重新编译mysqli客户端 - 并且在所有这一切都是一个总的菜鸟 - 我想我已经坚持通过Cpanel提供的版本(直到我的下一次升级)。 < / p>
答案 2 :(得分:0)
我建议你明确地将$userID
转换为整数,如果仍然失败则重新测试。
由于PHP变量是默认的变体,因此在将非字符串(在本例中为整数)绑定到查询时可能会遇到问题。
你可以尝试:
$sql = "UPDATE userProfile SET userFirstName=?, userLocale=? WHERE id=?";
$stmt->bind_param('ssi',$userFirstName,$userLocale,(int)$userID);
答案 3 :(得分:0)
我遇到了完全相同的问题。
(绑定参数不接受多个参数)
我使用此命令的mysql版本:
printf ("Client library Version:% d \ n", mysqli_get_client_version ());
是:50094
50095版本在这里遇到了这个问题:
更新到PHP 5.4到5.6(在共享服务器上)后,mysql版本也更新了,问题就消失了。
我的新mysql版本是50011