使用Php从Mysql获取用户评论

时间:2011-04-09 15:28:01

标签: php mysql

我正在尝试允许用户对我网站上的个人资料发表评论。我有以下 php - 更新

<?php
// Insert Comments into Database that user provides
$comm = mysql_real_escape_string($_POST['addComment']);
$pID4 = filter_input(INPUT_GET, 'pID', FILTER_SANITIZE_NUMBER_INT);
$cID = mysql_real_escape_string($_POST['courseInfoDD']);
        $username = "###";
        $password = "####";
        $pdo4 = new PDO('mysql:host=localhost;dbname=###', $username, $password);
        $pdo4->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sth3 = $pdo3->prepare('
        INSERT INTO Comment (info, pID, cID)
        VALUES(:info, :pID, :cID)
             ');
$sth3->execute(array(
            ':info' => $comm, ':pID' => $pID3, ':cID' => $cID
        ));
?>

数据库表“评论” http://postimage.org/image/16sbr0jd0/(主持人请将此转换为显示图片)

HTML:

<input type='text' id='addComment' name='addComment' tabindex='3' value='Enter comment' />

错误:

No pID specified。当我尝试插入评论时。

4 个答案:

答案 0 :(得分:4)

您在insert语句中使用单引号:

$sth3 = $pdo3->prepare('
    INSERT INTO Comment (info, pID, cID)
    VALUES($comm, $pID3, $cID)
');

使用这些简单的引号, $comm将不会被评估 - 并且文字$comm字符串将被发送到数据库 - 导致您可能不喜欢的内容我非常期待。


如果要插入变量,则应使用double-quotes around your string

但是,因为你试图使用准备好的陈述,而不是你应该做的,实际上。

相反,您应该在语句中使用占位符 - 然后在执行语句时将这些占位符绑定到您的数据。


我认为你的prepare看起来有点像这样:

$sth3 = $pdo3->prepare('
    INSERT INTO Comment (info, pID, cID)
    VALUES(:comm, :pID3, :cID)
');

请注意:comm:pID3:cID占位符。

然后,在执行语句时,您实际上会传递一些实际数据,以对应占位符:

$ sth3-&GT;执行(阵列(     ':comm'=&gt; $通讯,     ':pID3'=&gt; $ PID3,     ':cID'=&gt; $ CID, ));


附加说明:当您使用准备好的语句时,您不必使用mysql_real_escape_string() (这不是与PDO相关的功能,BTW,并且只应在使用mysql_*函数):转义是由准备好的声明mecanism本身处理的。

答案 1 :(得分:1)

PDO预处理语句的参数应该像这样使用:

$sth3 = $pdo3->prepare('
        INSERT INTO Comment (info, pID, cID)
        VALUES(:info, :pID, :cID)
             ');
$sth3->execute(array(
            ':info' => $comm, ':pID' => $pID3, ':cID' => $cID
        ));

首先为值设置“slots”,然后在运行查询时提供它们。

答案 2 :(得分:0)

单引号字符串中的$变量未被处理。请改用双引号并为SQL语句本身添加引号:

$sth3 = $pdo3->prepare("
        INSERT INTO Comment (info, pID, cID)
        VALUES('$comm', '$pID3', '$cID')
             ");

答案 3 :(得分:0)

我们的问题与mysql没有任何关系,没有评论。

这是基本的PHP字符串语法。

如果要在字符串中解释变量,请使用双引号。

但是,您不应该直接将变量添加到查询中,而应该将它们加入