我试图允许用户评论我的网站上的个人资料。我有以下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
));
?>DB表“评论” http://postimage.org/image/16sbr0jd0/ (版主请将此转换为显示图像)
HTML:
<input type='text' id='addComment' name='addComment' tabindex='3' value='Enter comment' />错误给出:
No pID specified。当我试图插入评论的时候。
发布于 2011-04-09 15:37:07
在insert语句中使用单引号:
$sth3 = $pdo3->prepare('
INSERT INTO Comment (info, pID, cID)
VALUES($comm, $pID3, $cID)
');使用这些简单的引号,$comm 将不会被计算为 --而文字$comm字符串将被发送到数据库--从而产生一些您可能并不期望的结果。
如果希望对变量进行内插,则应使用。
但是,当您尝试使用准备好的语句时,实际上不是您应该做的。
相反,应该在语句中使用占位符-然后,在执行语句时将这些占位符绑定到数据。
您的prepare看起来会有点像这样,我想:
$sth3 = $pdo3->prepare('
INSERT INTO Comment (info, pID, cID)
VALUES(:comm, :pID3, :cID)
');注意:comm、:pID3和:cID占位符。
然后,在执行语句时,实际上将传递一些实际数据,以对应占位符:
$sth3->执行(数组( ':comm‘=> $comm,’:cID 3‘=> $pID3,':cID’=> $cID,);
附加注意:当您使用预先准备的语句时,您不必使用mysql_real_escape_string() (它不是与相关的函数,BTW,只应在使用`mysql*`_函数时使用):转义由准备好的语句机制本身处理。
发布于 2011-04-09 15:36:33
PDO准备语句的参数应如下所示:
$sth3 = $pdo3->prepare('
INSERT INTO Comment (info, pID, cID)
VALUES(:info, :pID, :cID)
');
$sth3->execute(array(
':info' => $comm, ':pID' => $pID3, ':cID' => $cID
));首先为值设置“插槽”,然后在运行查询时提供它们。
发布于 2011-04-09 15:35:56
没有处理单引号字符串中的$variables。相反,使用双引号并为SQL语句本身添加引号:
$sth3 = $pdo3->prepare("
INSERT INTO Comment (info, pID, cID)
VALUES('$comm', '$pID3', '$cID')
");https://stackoverflow.com/questions/5605907
复制相似问题