Mysqli准备语句插入不插入

Mik*_*awn 5 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();

?>
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助.

Fun*_*ner 8

你有一些不匹配的变量.

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

?>
Run Code Online (Sandbox Code Playgroud)

然而,此时应更换$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 
Run Code Online (Sandbox Code Playgroud)

这将发出一个未定义的变量警告信号.

旁注:错误报告应该只在暂存中完成,而不是生产.


洞察力

正如Ghost所指出的那样:

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

因此你可能需要改变

$datetime = date("M d, Y");
Run Code Online (Sandbox Code Playgroud)

$datetime = date("Y-m-d H:i:s");
Run Code Online (Sandbox Code Playgroud)

要么

$datetime = date("Y-m-d");
Run Code Online (Sandbox Code Playgroud)

取决于列类型的设置.