INSERT私人消息系统PDO php

时间:2017-08-14 20:13:53

标签: php pdo messages

我正在尝试在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消息系统有关的指针。 最好的问候/罗伯特

1 个答案:

答案 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;
}

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