使用Php从Mysql获取用户评论
我正在尝试允许用户对我网站上的个人资料发表评论。我有以下php——更新了:使用Php从Mysql获取用户评论,php,mysql,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_st
<?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表“注释”
(请版主将此转换为显示图片)
HTML:
<input type='text' id='addComment' name='addComment' tabindex='3' value='Enter comment' />
给出错误:
<input type='text' id='addComment' name='addComment' tabindex='3' value='Enter comment' />
未指定pID
。当我尝试插入注释时。$单引号字符串中的变量未被处理。改为使用双引号,并为SQL语句本身添加引号:
$sth3 = $pdo3->prepare("
INSERT INTO Comment (info, pID, cID)
VALUES('$comm', '$pID3', '$cID')
");
未处理单引号字符串中的$变量。改为使用双引号,并为SQL语句本身添加引号:
$sth3 = $pdo3->prepare("
INSERT INTO Comment (info, pID, cID)
VALUES('$comm', '$pID3', '$cID')
");
我们的问题与mysql无关,与评论无关 这是基本的PHP字符串语法 如果希望在字符串中解释变量,请使用双引号
然而,您不应该直接将变量添加到查询中,而是将它们存储起来我们的问题与mysql无关,与注释无关 这是基本的PHP字符串语法 如果希望在字符串中解释变量,请使用双引号
但是,您不应该直接将变量添加到查询中,而是将它们存储起来。PDO prepared语句的参数应如下使用:
$sth3 = $pdo3->prepare('
INSERT INTO Comment (info, pID, cID)
VALUES(:info, :pID, :cID)
');
$sth3->execute(array(
':info' => $comm, ':pID' => $pID3, ':cID' => $cID
));
首先为值设置“插槽”,然后在运行查询时提供它们。PDO prepared语句的参数应如下使用:
$sth3 = $pdo3->prepare('
INSERT INTO Comment (info, pID, cID)
VALUES(:info, :pID, :cID)
');
$sth3->execute(array(
':info' => $comm, ':pID' => $pID3, ':cID' => $cID
));
首先为值设置“槽”,然后在运行查询时提供它们。您在insert语句中使用单引号:
$sth3 = $pdo3->prepare('
INSERT INTO Comment (info, pID, cID)
VALUES($comm, $pID3, $cID)
');
使用这些简单的引号,$comm
将不会被计算——而文本$comm
字符串将被发送到数据库——这可能会导致一些您不太期望的结果
如果希望对变量进行插值,则应使用 但是,当您试图使用准备好的语句时,实际上您不应该这样做 相反,您应该在语句中使用占位符,然后在执行语句时将占位符绑定到数据
您的
准备
看起来有点像这样,我想:
$sth3 = $pdo3->prepare('
INSERT INTO Comment (info, pID, cID)
VALUES(:comm, :pID3, :cID)
');
注意:comm
、:pID3
和:cID
占位符
然后,在执行语句时,您将实际传递一些真实数据,以对应占位符:
$sth3->执行(数组)(
':comm'=>$comm,
“:pID3”=>$pID3,
':cID'=>$cID,
));
附加说明:当您使用准备好的语句时,您不必使用
mysql\u real\u escape\u string()
(顺便说一句,这不是一个与PDO相关的函数,只应在使用mysql\u*
函数时使用):转义由准备好的语句mecanism本身处理。您在insert语句中使用单引号:
$sth3 = $pdo3->prepare('
INSERT INTO Comment (info, pID, cID)
VALUES($comm, $pID3, $cID)
');
使用这些简单的引号,$comm
将不会被计算——而文本$comm
字符串将被发送到数据库——这可能会导致一些您不太期望的结果
如果希望对变量进行插值,则应使用 但是,当您试图使用准备好的语句时,实际上您不应该这样做 相反,您应该在语句中使用占位符,然后在执行语句时将占位符绑定到数据
您的
准备
看起来有点像这样,我想:
$sth3 = $pdo3->prepare('
INSERT INTO Comment (info, pID, cID)
VALUES(:comm, :pID3, :cID)
');
注意:comm
、:pID3
和:cID
占位符
然后,在执行语句时,您将实际传递一些真实数据,以对应占位符:
$sth3->执行(数组)(
':comm'=>$comm,
“:pID3”=>$pID3,
':cID'=>$cID,
));
附加说明:当您使用准备好的语句时,您不必使用
mysql\u real\u escape\u string()
(顺便说一句,这不是一个与PDO相关的函数,只应在使用mysql\u*
函数时使用):转义由prepared语句mecanism本身处理。考虑到他正在使用prepared语句,不应将值注入查询,而应在执行语句时对其进行绑定。考虑到他正在使用prepared语句,不应将值注入查询,当执行语句时,它们应该被绑定。如果我尝试此操作并尝试提交注释,它会抛出一个错误,即没有为“professor”找到“pID”。我是否应该在查询“WHERE pID=?”中添加此项?@user700070:No,WHERE不用于insert。看起来pID应该是URL的GET变量的一部分,如/addcomment.php?pID=3
@user700070:是否将?pID=3
添加到表单的操作中?应该这样做。虽然为了清晰起见,我建议您也将pID移到POST字段。如果我尝试此操作并尝试提交评论,它会抛出一个错误,即找不到“教授”的“pID”。我是否应该在查询“WHERE pID=?”中添加此项?@user700070:No,WHERE不用于insert。看起来pID应该是URL的GET变量的一部分,如/addcomment.php?pID=3
@user700070:是否将?pID=3
添加到表单的操作中?应该这样做。尽管为了清晰起见,我还是建议您将pID移到POST字段。请参阅我更新的代码,这个“prepare”方法似乎没有抓住“$pID3=filter\u input(input\u GET,'pID',filter\u SANITIZE\u NUMBER\u INT);”行中的pID其中$pID3准备为var。为什么不获取pID?请参阅我的更新代码,此“prepare”方法似乎没有获取行“$pID3=filter\u input(input\u GET,'pID',filter\u SANITIZE\u NUMBER\u INT);”中的pID其中$pID3是作为var准备的。为什么这不是