不知道为什么这不起作用。我按照完全相同的程序(即准备,绑定,执行)在同一个数据库上执行SELECT。但由于某种原因,更新不会在数据库中更新。
以下是代码:
$stmtUpdate = $mysqli->prepare("UPDATE license_keys.$injection_key_text_type
SET given_date = CURRENT_DATE(), contact_email = ?, given_bool = ?, contact_id = ?
WHERE key_text_id = ?;";
$stmtUpdate->bind_param("siss",$recipient_email,1,$contact_id,$key_text_id);
$stmtUpdate->execute();
$stmtUpdate->close();
我尝试过的事情
given_date = CURRENT_DATE
切换为given_date = ?
,然后在我的绑定参数中添加了一个任意字符串,即($stmtUpdate->bind_param("ssiss","11-8-2014",$recipient_email,1,$contact_id,$key_text_id);
另请注意,如果我将其作为程序运行它可以正常工作,但我需要它使用预处理语句。 这是程序代码:
$mysqli->query("UPDATE license_keys.$injection_key_text_type
SET given_date = CURRENT_DATE(), contact_email = '$recipient_email', given_bool = 1, contact_id = '$contact_id'
WHERE key_text_id = '$key_text_id';");
答案 0 :(得分:2)
根据变量名称向我看,如果它们实际上是INT
,那么您需要将其中几个占位符作为整数而不是字符串。
$stmtUpdate->bind_param("siii",$recipient_email,1,$contact_id,$key_text_id);
出于调试目的,我建议你这样做。 $mysqli
将是您的数据库连接。希望它能让你知道出了什么问题。
if (!($stmtUpdate = $mysqli->prepare("UPDATE license_keys.$injection_key_text_type
SET given_date = CURRENT_DATE(), contact_email = ?, given_bool = ?, contact_id = ?
WHERE key_text_id = ?")) {
echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
exit;
}
if (!$stmtUpdate->bind_param("sisi",$recipient_email,1,$contact_id,$key_text_id)) {
echo "Binding parameters failed: (" . $stmtUpdate->errno . ") " . $stmtUpdate->error;
exit;
}
if (!$stmtUpdate->execute();) {
echo "Execute failed: (" . $stmtUpdate->errno . ") " . $stmtUpdate->error;
exit;
}