INSERT 私信系统 PDO php

INSERT private message system PDO php

我正在尝试在 PHP 中构建一个小型私人消息系统,我正在使用 PDO 作为与数据库的连接。除了最重要的部分,我的工作量最大。

我无法获取插入消息以向数据库写入任何内容,因此我需要一些帮助。

我会先 post 我的数据库,这样你们都可以在这里看到我们正在使用的内容。 从我的用户开始

id int(10) UN AI PK 
username varchar(30) 
password varchar(100) 
regdate datetime

这是我的消息table,我正在尝试将消息写到

id int(11) AI PK 
from_user varchar(45) 
to_user varchar(45) 
subject varchar(400) 
message text 
date date 
read tinyint(4) 

我已经尝试了几个不同的代码来让它工作 我现在将粘贴根据我的错误检查显示消息已成功发送的代码...

$sql = "
INSERT INTO private_messages VALUES('',$user, 
$to_user','$subject',$message','$date','0')
";

    echo "Youre message was succesfully sent...";

但这不起作用,我知道这可能不是使用 PDO 的正确方法。

这个我也试过了

$query =$dbh->prepare("INSERT INTO private_messages(user, to_user, subject, 
message,
date);
VALUES('',$user, $to_user','$subject',$message','$date','0')
");

$query->bindParam(":user", $user);
$query->bindParam(":to_user", $to_user);
$query->bindParam(":subject", $subject);
$query->bindParam(":message", $message);

if ($query->execute()) {
    $success = true;
}

但随后出现致命错误:未捕获的 PDOException:SQLSTATE[42000]:语法错误或访问冲突:1064

我也会post我使用的表格,如果它可以是任何值的话

echo "
<form action='compose.inc.php' method='POST'>
<table>
<tr>
<td>To: </td>
<td><input type='text' name='to_user'/></td>
</tr>
<tr>
<td>Subject: </td>
<td><input type='text' name='subject'/></td>
</tr>
<tr>
<td>Message:</td>
<td><textarea name='message' rows='10' cols='50'></textarea></td>
</tr>
<tr>
<td></td>
<td colspan='2'><input type='submit' name='submit' value='Send Message'/>
</td>
</r>
</table>
</form>

  ";

在做这个消息系统时我一直在关注这个https://www.youtube.com/watch?v=BED_yMC7qv0,它使用mysqli并且我一直试图将它解码为PDO,我认为问题出在这里

如此简短的回顾 我的错误检查显示我的消息已发送。 没有任何内容写入我的数据库。 我正在尝试使用 PDO。

如果我找不到解决方案,我很想获得教程或书籍或任何与 PDO 消息系统有关的指针。 最好的问候/罗伯特

不是将变量插入到查询中,而是通过绑定它们来执行此操作。

$query =$dbh->prepare("INSERT INTO private_messages (user,to_user,subject,message,date)
VALUES(:user,:to_user,:subject,:message,NOW())");

$query->bindParam(":user", $user);
$query->bindParam(":to_user", $to_user);
$query->bindParam(":subject", $subject);
$query->bindParam(":message", $message);

if ($query->execute()) {
    $success = true;
}

此外,您应该使值的数量与列的数量相匹配。