在准备好的声明中执行不返回任何内容

时间:2012-10-14 05:00:48

标签: php mysql

我已经验证了下面的所有变量,现在正尝试使用预处理语句将它们插入到我的mysql数据库中,但即使我没有收到任何系统错误,数据也不会插入。 $ insert_stmt-> affected_rows> 0返回false,从而显示我的自定义警告消息:

$insert_stmt = $db->prepare("INSERT INTO users (id,timestamp,externalid,password,authentication,email) VALUES(NULL,NOW(),?,?,?,?)");
$insert_stmt->bind_param("ssss",$userid,$hash,$authenticate,$email);
$insert_stmt->execute();
if ($insert_stmt->affected_rows>0)

我对PHP(以及社区)有些新意,并且无法弄清楚为什么没有插入任何内容并且我的自定义警告消息始终显示?同样,不会产生系统错误。谢谢!

3 个答案:

答案 0 :(得分:3)

调用execute()时可能会出错。如果语句成功,execute()将返回TRUE,失败时FALSE将返回FALSE。所以检查返回值。如果是mysqli_stmt_error(),请致电{{1}}以获取有关问题的信息。

答案 1 :(得分:1)

请执行以下操作:

1)看看这个链接:

2)连接数据库后添加:

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

3)在prepare,bind和execute语句周围添加这个try / catch块:

try { .. } and catch (Exception $e) { echo $e->getMessage(); }

4)报告您收到的错误消息(如果有)

确定以检查通话的错误状态。特别是$insert_stmt->execute()

答案 2 :(得分:1)

我想出了这个问题。我正在使用已经存在于数据库中的externalid进行测试,并且我的防止重复外部ID的检查无法正常工作,因此我的代码到达插入行并尝试将externalid再次放入MySQL,因为它已经存在于数据库中。我已将externalid设置为唯一字段,因此不允许输入。当我设置E_ALL |时,MySQL虽然没有返回任何明显的错误E_STRICT。很高兴知道将来。

我没有意识到我正在测试一个重复的条目,所以很抱歉社区添加了这个信息块。