在我的代码中,我使用mysqli预处理语句来执行2个UPDATE查询
执行UPDATE的函数($this->db
是正确连接到DB的mysqli对象):
public function Update($query, $values)
{
if(empty($values)) return false;
$this->db->query("SET NAMES UTF8");
$stmt = $this->db->prepare($query);
var_dump($stmt);
$types = '';
$vals = array();
foreach ($values as $key => $value)
{
$types .= $value['type'];
if(strnatcmp(phpversion(),'5.3') >= 0) $vals[$key] = &$values[$key]['value'];
else $vals[$key] = $values[$key]['value'];
}
var_dump($vals);
// var_dump($types);
call_user_func_array("mysqli_stmt_bind_param", array_merge(array($stmt, $types), $vals)); // binding parameters to query
var_dump($stmt);
if(!$stmt->execute())
{
print_r($stmt->error);
return false;
}
$stmt->close();
return true;
}
然后在我的脚本中调用此函数:
$this->db->Update('UPDATE contact SET coupon_id=? WHERE adi=?',
array(
'coupon_id'=> array('type'=>'s', 'value'=>$coupon_number),
'adi'=> array('type'=>'i', 'value'=>$adi)
)
);
$this->db->Update('UPDATE coupon SET uses_count=uses_count+1 WHERE id=?',
array(
'id'=> array('type'=>'i', 'value'=>$coupon_number)
)
);
在我的本地主机上一切正常,但它在我的虚拟主机上有一些奇怪的行为:
1)只执行一个更新(更好的说 - 我不知道另一个是否被执行,但绝对数据库没有更新)
2)当我var_dump
mysqli_stmt对象(在prepare()
之后或execute()
之后,相同的结果)时,它是空的(对于BOTH更新,也适用于正常工作的那个):
object(mysqli_stmt)#11 (0) {
}
在我的localhost上,我可以看到带有相应值的完整对象变量(affected_rows,insert_id,...)
3)当我使用旧的mysql_query运行这个非工作更新查询时 - 它正常工作
最后 - $stmt->errors
和$stmt->execute()
返回true
没有错误。
我真的很沮丧所有这些东西,所以任何建议都会受到赞赏,而不是