2014-11-08 82 views
1

不知道为什么这不起作用。我按照完全相同的过程(即准备,绑定,执行)在同一个数据库上执行SELECT。但由于某种原因的更新不会在数据库中更新。PHP MYSQLI编写的update语句不起作用?

下面是代码:

$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_DATEgiven_date = ?则刚添加的任意字符串到我的绑定参数即($stmtUpdate->bind_param("ssiss","11-8-2014",$recipient_email,1,$contact_id,$key_text_id);
  • 在声明结尾处尝试使用和不使用“;”,因为它使用w使用程序版本而不是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';"); 

回答

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; 
} 
+0

非常好的建议,我什至没有想到这一点。所以这给了我一个更好的想法,因为$ key_text_id是一个int,所以我做了这个改变,但奇怪的是$ contact_id被存储为一个varchar?我想现在可能与'given_date = CURRENT_DATE()'函数有关。因为我的测试页甚至没有吐出原本放在脚本顶部的html。 非常感谢您的建议 – 2014-11-08 18:17:04

+0

'given_date'列类型为'DATE','DATETIME'或'TIMESTAMP'? – EternalHour 2014-11-08 18:22:49

+0

'given_date'在数据库中输入'date' – 2014-11-08 18:28:37