不知道为什么这不起作用。我在同一个数据库上执行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();
我尝试过的
- 将if语句中的第一行换行
- 将
given_date = CURRENT_DATE
切换到given_date = ?
,然后只向我的绑定参数($stmtUpdate->bind_param("ssiss","11-8-2014",$recipient_email,1,$contact_id,$key_text_id);
- 尝试在语句末尾使用和不使用";",因为它适用于过程版本,但不适用于OO方式
另请注意,如果我将其作为过程性运行,它运行得很好,但我需要它使用准备好的语句。这是程序代码:
$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';");
根据变量名,我认为如果这些占位符实际上是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;
}