Mysqli准备语句插入不插入

时间:2014-11-05 06:53:46

标签: php mysqli

我已经连接到数据库了。当我回显所有变量时,它们可以工作,但它们不会插入到我的数据库表中。我的表名正确。这是代码:

<?php

$pid = '1'; 
$pname = 'name'; 
$poster_id = '2';
$poster_name = 'name2'; 
$message = 'This is the message';

$datetime = date("M d, Y");

// insert into database
$ins  = "INSERT INTO messages (profile_id, profile_name, poster_id, poster_name, message, countnum, postdate) VALUES (?, ?, ?, ?, ?, ?, ?)";

$stmt = $con->prepare($ins);
$num = 1;
$stmt->bind_param('isissis', $pid, $pname, $user_id, $user, $comment, $num, $datetime);
$stmt->execute();

?>

感谢您提前提供任何帮助。

1 个答案:

答案 0 :(得分:7)

您有一些不匹配的变量。

$poster_id - $poster_name - $message

与你的绑定对齐:

$user_id, $user, $comment


现在应该可以了:

<?php

$pid = '1'; 
$pname = 'name'; 
$poster_id = '2';
$poster_name = 'name2'; 
$message = 'This is the message';

$datetime = date("M d, Y");

// insert into database
$ins  = "INSERT INTO messages (profile_id, profile_name, poster_id, poster_name, message, countnum, postdate) VALUES (?, ?, ?, ?, ?, ?, ?)";

$stmt = $con->prepare($ins);
$num = 1;
$stmt->bind_param('isissis', $pid, $pname, $poster_id, $poster_name, $message, $num, $datetime);
$stmt->execute();

?>

但是,您应该将$stmt->execute();替换为if(!$stmt->execute()){trigger_error("there was an error....".$con->error, E_USER_WARNING);}

以捕捉错误。

同时将error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code 

表示未定义的变量警告。

旁注:错误报告应仅在暂存时完成,而不是生产。


洞察

正如幽灵所指出的那样:

$datetime格式M d, Y也是可疑的,如果确实如此,它可能会导致Y-m-d H:i:s列格式DATETIME

因此您可能需要更改

$datetime = date("M d, Y");

$datetime = date("Y-m-d H:i:s");

$datetime = date("Y-m-d");

取决于您的列类型设置的内容。