我开始为我的小型房地产企业创建一个网站。 我玩了一下函数 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/