Mysqli Prepare语句插入未插入


Mysqli Prepare Statement Insert Not Inserting

我已经连接到数据库。当我回显所有变量时,它们都起作用,但它们不会插入到我的数据库表中。我把桌子的名字记对了。这是代码:

<?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();
?>

感谢您提前提供的帮助。

您有一些变量不匹配。

$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);}

以便捕捉错误。

此外,将错误报告添加到文件顶部,这将有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code 

这将发出未定义变量警告的信号。

旁注:错误报告只能在临时阶段进行,而不能在生产阶段进行。


洞察

正如Ghost所指出的:

$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");

取决于您的列类型设置为什么。