php:sql error“错误:带查询的‘where子句’中的未知列‘rm’”

s1ag04yj  于 2021-06-25  发布在  Mysql
关注(0)|答案(3)|浏览(279)

我试图创建一个php文件,搜索我在ubuntu中用mysql创建的数据库,但是当我运行查询时,我得到了这个错误,但我不明白为什么!!!当我打印错误时,我传递的数据是正确的,并且显示在字符串中!!!!!
我认为这是一个语法错误,但我不知道它在哪里!!!!
这是我创建字符串并执行查询的摘录:

$sql_find = ("SELECT CITY, ADRESS, CAP FROM PEOPLE WHERE  ID_PERSON = $idperson  AND NAME_PERSON = $name  AND SURNAME = $surname ") ;
print $sql_find;

  $result= mysqli_query($connect,$sql_find) or  die ("Error: ". mysqli_error($connect)." with query ");

传递的数据是我在应用程序中创建的人的姓名、姓氏和id。例子:
$idperson=rm120463$name=mario$姓氏=rossi
当我打印错误时,它也会打印我创建的select,它是:
从id\u person=rm120463和姓名\u person=mario和姓氏=rossi的人员中选择城市、地址和上限
如果查询组合正确,为什么会给我错误?
谢谢,只有你能帮我!!!!!

carvr3hs

carvr3hs1#

你忘了引号:

"SELECT CITY, ADRESS, CAP FROM PEOPLE WHERE  ID_PERSON = '$idperson'  AND NAME_PERSON = '$name'  AND SURNAME = '$surname'"

顺便说一下,我看不到您的所有代码,但可能是sql注入的弱点。看看是否直接使用input($var=$\u post['…'])中的数据,并替换为prepared语句和bind参数。

dpiehjr4

dpiehjr42#

你错过了关于var的引述吗

$sql_find = ("SELECT CITY, ADRESS, CAP 
          FROM PEOPLE 
          WHERE  ID_PERSON = $idperson  
          AND NAME_PERSON = '$name'  
          AND SURNAME = '$surname'; ") ;

但是您不应该在sql中使用php var。。您应该看看绑定参数的db驱动程序。。使用binding param可以避免sql注入的风险,并在绑定期间生成正确的值

cmssoen2

cmssoen23#

通过绑定参数避免sql注入攻击的风险。此外,使用面向对象代码更整洁:

$sql_find = <<<EOT
SELECT CITY, ADRESS, CAP FROM PEOPLE 
WHERE ID_PERSON = ? AND NAME_PERSON = ? AND SURNAME = ?
EOT;
print $sql_find;

$stmt = $connect->prepare( $sql_find);
$stmt->bind_param( 'sss', $id_person, $name, $surname);

$stmt->execute() or
    die ("Error: ". $stmt->error()." with query ");

$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
   // gets assoc array with 'CITY', 'ADRESS' and 'CAP' elements..
}

相关问题