php - 如果名称超过 1 个单词,mysql 查询将失败

标签 php mysql

我开始为我的小型房地产企业创建一个网站。 我玩了一下函数 http://www.php.net mysql 和我成功地创建了一个通过 AJAX 访问的页面,并为搜索引擎返回 html 内容。

我有一个已经填充了公寓和房屋的数据库

问题是,如果公寓名称是“公寓”,则返回 html 内容,如果“有 3 个房间的公寓”,则不再写任何内容。

我不明白我错在哪里:

<?php
    $search = $_GET['selected'];

    $link = mysql_connect('localhost', 'root', '');
    mysql_select_db('houses', $link);

    function searchHouse($search, $link){
        $query = "select * from houses where name=$search limit 1";
        $result = mysql_query($query);
        $row = mysql_fetch_assoc($result);

        $query2 = "select * from houses_info where house_id=$row[id]";
        $result2 = mysql_query($query2);
        $row = mysql_fetch_assoc($result2);
        return $row;
    }

    $result = searchHouse($search, $link);

    echo $result['house_sq'];
    echo "<br>";
    echo $result['house_rooms'];
    echo "<br>";
    echo $result['house_bathrooms'];
    echo "<br>";
    echo $result['house_address'];

    ?>

最佳答案

  • 你应该知道你是否“玩过” php.net mysql_* 函数已弃用并且不再维护。它是页面顶部的一个红色框,通知您这一点。
  • 你那里有一个很大的MySQL注入(inject)漏洞,你根本无法逃避$string
  • 您的问题是您没有向 $string 添加引号,例如:'$string'
  • 您应该使用 PDO 来消除不良代码和 SQL 注入(inject)漏洞。
  • 您可以将这 2 个选择包装成一个选择:

    <?php
        function searchHouse($search, $link){
            $search = mysql_real_escape_string($search);
            $query = "select * from houses_info where house_id IN (select * from houses where name='".$search."' limit 1)";
            $result = mysql_query($query);
            $row = mysql_fetch_assoc($result);
            return $row;
        }
    ?>
    
  • 由于您已经在构建该网站,因此您可以开始转向 PDO,请阅读此文 tutorial ,您的代码将更像这样:

    <?php
        $db = new PDO('mysql:host=localhost;dbname=houses;charset=UTF-8', 'root', '', array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
        $search = $_GET['selected'];
    
        function searchHouse($search){
            global $db;
    
            $query = $db->prepare("select * from houses_info where house_id IN (select * from houses where name=:search limit 1)");
            $query->execute(array(':search' => $search));
            $row = $query->fetch(PDO::FETCH_ASSOC);
            return $row;
        }
    
        $result = searchHouse($search);
    ?>
    

关于php - 如果名称超过 1 个单词,mysql 查询将失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12240092/

相关文章:

php - 使用 mysqli 创建用户定义的函数是一种好的做法和安全的方法吗?

php - 根据尺寸计算自定义 Woocommerce 产品重量

带有 AND 和 OR(包含和排除子句)的 HAVING COUNT(DISTINCT) 的 mySql 查询

mysql - 将 3 个表连接到第一个表的多个列中

javascript - 如何检测 Javascript 文件的新版本?

javascript - 如果之前已经打开,则重定向到不同的页面

PHP初学者安全恐惧

mysql - 如何解决 ubuntu 14.04 安装 mysql-server 时未满足的依赖关系

MySQL 查询未在命令行上运行

MySQL Select Distinct with Left Join?