gpt4 book ai didi

php - 使用 PDO 插入空条目,bindparam 失败

转载 作者:行者123 更新时间:2023-11-29 13:37:28 25 4
gpt4 key购买 nike

我正在尝试使用 PDO 将包含一些值的表单插入到 MySQL 数据库中。

    /*** Values for the form ***/
$date = date_create();
$time = date('Y-m-d H:i:s');
$message = $_POST['message'];
$uid = $_SESSION['SESS_MEMBER_ID'];
$admin = 1;

/*** prepare the SQL statement ***/
$stmt = $db->prepare("INSERT INTO messages (message_id, timestamp, uid, admin, read, edited, message) VALUES ('',':time',':uid',':admin','','',':message')");

/*** bind the paramaters ***/
$stmt->bindParam(':time', $time, PDO::PARAM_STR);
$stmt->bindParam(':uid', $uid, PDO::PARAM_STR);
$stmt->bindParam(':admin', $admin, PDO::PARAM_INT, 1);
$stmt->bindParam(':message', $message, PDO::PARAM_STR);

/*** execute the prepared statement ***/
$stmt->execute();

结果是:
一个空条目,仅设置了 message_id 且消息仍带有占位符:mesagge

(message_id, timestamp, uid, admin, read, edited, message)    
15 | 0000-00-00 00:00:00 | 0 | 0 | 0 | 0 |:bericht

占位符或 INSERT 查询有什么问题?

最佳答案

$stmt = $db->prepare("INSERT INTO messages (message_id, timestamp, uid, admin, read, edited, message) VALUES ('',':time',':uid',':admin','','',':message')");

当您使用占位符时,不需要引用它们。当 SQL 中包含 ':time' 时,它会将带有文本 :time 的字符串传递到数据库。您的 SQL 应该如下所示:

$stmt = $db->prepare("INSERT INTO messages (message_id, timestamp, uid, admin, read, edited, message) VALUES ('',:time,:uid,:admin,'','',:message)");

(根据 IMSoP 的评论进行编辑)

如果没有添加数据,您的 INSERT 中也不一定需要有字段。如果缺少列,则将根据表的设计使用该列的默认值添加行;或 NULL(如果没有)。如果它是 AUTO_INCRMENT 字段,那么它不应该出现在您的 INSERT 语句中,因为它会导致问题。您不能在设置为 NOT NULL 的字段上使用此选项,重要的是要记住 NULL 和 '' 是不同的值,因此使用此选项取决于您如何编写其余部分代码;但您可以使用简短的代码:

$stmt = $db->prepare("INSERT INTO messages (timestamp, uid, admin, message) VALUES (:time,:uid,:admin,:message)");

关于php - 使用 PDO 插入空条目,bindparam 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18559355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com