Php 就像PDO中的查询不工作一样

Php 就像PDO中的查询不工作一样,php,mysql,pdo,Php,Mysql,Pdo,PDO查询运行良好,但当我尝试使用LIKE查询时,它不起作用,并给出错误。我知道我做错了什么,如果有人能指出我哪里做错了,以及如何正确运行类似的查询,请告诉我 <?php /** * Created by PhpStorm. * User: HaiderHassan * Date: 9/3/14 * Time: 9:52 PM */ header('Access-Control-Allow-Origin: *'); try { $conn = new PDO('mysql

PDO查询运行良好,但当我尝试使用LIKE查询时,它不起作用,并给出错误。我知道我做错了什么,如果有人能指出我哪里做错了,以及如何正确运行类似的查询,请告诉我

<?php
/**
 * Created by PhpStorm.
 * User: HaiderHassan
 * Date: 9/3/14
 * Time: 9:52 PM
 */
header('Access-Control-Allow-Origin: *');
try {
    $conn = new PDO('mysql:host=localhost;dbname=houserentsystem;charset=utf8', 'root', 'admin');
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
}
if($_POST['searchFilter']){
    $searchFilter = "%".$_POST['searchFilter']."%";
    echo $searchFilter;
    $stmt = $conn->query("SELECT roomName FROM roomnames WHERE roomName LIKE".$searchFilter);
    $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
    $stmt->closeCursor();
    print_r(json_encode($results));
}
这行中的

    $stmt = $conn->query("SELECT roomName FROM roomnames WHERE roomName LIKE".$searchFilter);
  • 后面必须有一个空格,比如
  • 您需要将字符串括在撇号之间,使其成为实际的SQL字符串
  • 您肯定应该使用,因为现在这是一个巨大的SQL注入漏洞(如果有人搜索
    ”;从RoomName中删除;选择“
    ?”)
  • 在这方面:

        $stmt = $conn->query("SELECT roomName FROM roomnames WHERE roomName LIKE".$searchFilter);
    
  • 后面必须有一个空格,比如
  • 您需要将字符串括在撇号之间,使其成为实际的SQL字符串
  • 您肯定应该使用,因为现在这是一个巨大的SQL注入漏洞(如果有人搜索
    ”;从RoomName中删除;选择“
    ?”)

  • 您有多个问题:

    a) 易受SQL注入攻击
    b) 在LIKE之后缺少空间,这意味着你正在制作

    ... LIKE%foo%
    
    c) 搜索参数周围缺少引号,因此即使修复了b),仍然会有问题。应该是

    ... LIKE '$searchParameter'
             ^----------------^--- note the quotes
    

    您有多个问题:

    a) 易受SQL注入攻击
    b) 在LIKE之后缺少空间,这意味着你正在制作

    ... LIKE%foo%
    
    c) 搜索参数周围缺少引号,因此即使修复了b),仍然会有问题。应该是

    ... LIKE '$searchParameter'
             ^----------------^--- note the quotes
    

    应该准备好这份声明

    if($_POST['searchFilter']){
        $searchFilter = $_POST['searchFilter'];
        echo $searchFilter; 
        try {
            $conn = new PDO('mysql:host=localhost;dbname=houserentsystem;charset=utf8', 'root', 'admin');
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $stmt = $conn->prepare("SELECT roomName FROM roomnames WHERE roomName LIKE ?");
            $stmt->execute(array('%'.$searchFilter.'%')); 
            $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
            //print_r($results);
            echo json_encode($result);
        } catch(PDOException $e) {
            echo 'ERROR: ' . $e->getMessage();
        }
    }
    

    应该准备好这份声明

    if($_POST['searchFilter']){
        $searchFilter = $_POST['searchFilter'];
        echo $searchFilter; 
        try {
            $conn = new PDO('mysql:host=localhost;dbname=houserentsystem;charset=utf8', 'root', 'admin');
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $stmt = $conn->prepare("SELECT roomName FROM roomnames WHERE roomName LIKE ?");
            $stmt->execute(array('%'.$searchFilter.'%')); 
            $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
            //print_r($results);
            echo json_encode($result);
        } catch(PDOException $e) {
            echo 'ERROR: ' . $e->getMessage();
        }
    }
    


    您很容易受到攻击。我想您的其他“工作”查询也需要修复。@Marek不,这是我唯一需要的查询。需要侧边栏小工具的查询。您很容易受到攻击。我想您的其他“工作”查询也需要修复。@Marek不,这是我唯一需要的查询。想要侧边栏小工具的那个查询。你真的不应该用另一个错误/不完整的解决方案来回答。同意,但你真的不应该发表含糊的评论,提出批评,但不指出错误。我错过了什么?对不起,我不擅长提问。只是想找到解决方案或方法,让它发挥作用。谢谢您的回复。@NielsKeurentjes您在第3点中提到过。不要只提它,而是把它纳入你的答案中。@Marek我不明白你的意思。你是否真的投了反对票,并在这里发表了嘲讽性的评论,仅仅是因为我没有从a到Z为他们编写代码,而是更愿意只为他们指出正确的方向,让他们自己从中找到答案?给一个人一条鱼。。。即使投票率最高的答案也不会给出复制/粘贴解决方案。你确实不应该用另一个错误/不完整的解决方案来回答。同意,但你确实不应该发表含糊的评论,提出批评,但不指出错误。我错过了什么?对不起,我不擅长提问。只是想找到解决方案或方法,让它发挥作用。谢谢您的回复。@NielsKeurentjes您在第3点中提到过。不要只提它,而是把它纳入你的答案中。@Marek我不明白你的意思。你是否真的投了反对票,并在这里发表了嘲讽性的评论,仅仅是因为我没有从a到Z为他们编写代码,而是更愿意只为他们指出正确的方向,让他们自己从中找到答案?给一个人一条鱼。。。即使投票率最高的答案也没有给出复制/粘贴解决方案。使用您的
    $stmt=$conn->prepare(“从roomName中选择roomName,roomName像什么?”)$stmt->execute(数组('%.$searchFilter'%')工作起来很有魅力。谢谢。是的,这样你就安全了,尤其是搜索查询谢谢,你真的节省了我的一些时间。使用了你的
    $stmt=$conn->prepare(“从roomName中选择roomName,roomName像什么?”)$stmt->execute(数组('%.$searchFilter'%')工作起来很有魅力。谢谢。是的,这样你就安全了,尤其是搜索查询。谢谢,你真的节省了我的一些时间。SQL注入没问题,因为制作了一个边栏小工具,如果数据存在,只需要选择查询。显示:)现在他们不关心sql注入,他们将有本地服务器。sql注入没有问题,因为他们制作了一个侧栏小工具,如果数据存在,只需要选择查询。显示:)目前,他们不关心sql注入,他们将拥有本地服务器。