我正在尝试在PHP中构建一个小的私人消息系统,我使用PDO作为数据库的连接。我有最大的工作感到最重要的部分。
我无法获取插入消息以向数据库写入任何内容,所以我希望得到一些帮助。
我将首先发布我的数据库,以便您可以看到我们在这里工作的内容。 从我的用户开始
id int(10) UN AI PK
username varchar(30)
password varchar(100)
regdate datetime
这是我的消息表,我试图将消息写入
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
如果可以使用任何值
,我也会发布表格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消息系统有关的指针。 最好的问候/罗伯特
答案 0 :(得分:1)
不是将变量插入查询,而是通过绑定它们来实现。
$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;
}
此外,您应该将值的数量与列数相匹配。