1

这是我制作的第一个 PHP 应用程序;我这周开始学习 PHP,所以不要杀我,好吗?;)

我正在尝试使用此脚本来查找我们数据库中可用的 DJ。出于某种原因,当我手动输入区域时,例如:

 'regions' LIKE \'tn_tricities\'

它返回结果,但是当我输入它时:

 $region = 'tn_tricities'
 ...
 `regions` LIKE \'$region\'

它不返回任何结果。知道如何解决这个问题吗?或者如果我完全走错了方向,这不是检查可用性的最佳方式,请告诉我!

完整代码:

 $region = $_GET['region'];
 $date = $_GET['date'];

 require "connect.php";
 echo $region;
 $sql = 'SELECT `vendorName`, `vendorBio`, `vendorType`, `regions` FROM
 `vendors` WHERE `regions` LIKE \'$region\' AND `datesBooked` NOT LIKE
 \'$date\'  AND `datesUnavailable` NOT LIKE \'$date\' ';
4

5 回答 5

0

您正在使用单引号 (')。变量不会被解析。要么将变量放在引号之外,要么使用双引号 (")。

$sql = 'SELECT `vendorName`, `vendorBio`, `vendorType`, `regions` FROM
 `vendors` WHERE `regions` LIKE \'' . $region . '\' AND `datesBooked` NOT LIKE
 \'' . $date . '\'  AND `datesUnavailable` NOT LIKE \'' . $date . '\' ';
// OR
$sql = "SELECT `vendorName`, `vendorBio`, `vendorType`, `regions` FROM
 `vendors` WHERE `regions` LIKE '$region' AND `datesBooked` NOT LIKE
 \'$date\'  AND `datesUnavailable` NOT LIKE '$date' ";

还要小心SQL 注入

于 2015-04-23T06:07:13.357 回答
0

单引号不允许你在里面使用变量。而是使用双引号:

$sql = "SELECT `vendorName`, `vendorBio`, `vendorType`, `regions` FROM
 `vendors` WHERE `regions` LIKE \'$region\' AND `datesBooked` NOT LIKE
 \'$date\'  AND `datesUnavailable` NOT LIKE \'$date\' ";
于 2015-04-23T06:07:24.233 回答
0

试试这个,

$region = $_GET['region'];
$date = $_GET['date'];

require "connect.php";
echo $region;

$sql = "SELECT `vendorName`, `vendorBio`, `vendorType`, `regions` FROM `vendors` WHERE `regions` LIKE '$region' AND `datesBooked` NOT LIKE '$date'  AND `datesUnavailable` NOT LIKE '$date' ";
$result = mysql_query($sql);

希望这有效。

于 2015-04-23T06:06:48.457 回答
0

那是因为单引号和双引号之间的区别。

单引号不会“读取”其中的变量,而只会打印您所写的内容。双引号改为读取变量值并用它们替换您编写的字符串。

小例子:

$var = "Hello";

echo "$var";
//prints Hello
echo '$var';
// prints $var

因此,只需将您的查询用双引号括起来,一切都会正常工作:

$sql = "SELECT `vendorName`, `vendorBio`, `vendorType`, `regions` FROM `vendors` WHERE
`regions` LIKE \'$region\' AND `datesBooked` NOT LIKE \'$date\'  AND `datesUnavailable`
NOT LIKE \'$date\'";
于 2015-04-23T06:09:56.723 回答
0

请不要将直接变量用于 mysql 查询。有人可以提交; DELETE * FROM TABLE;或任何任意 mysql 代码作为日期或区域,并且可以对您的服务器做非常邪恶的事情。请使用转义函数,例如mysqli_real_escape_string

我会推荐:

$sql = 'SELECT `vendorName`, `vendorBio`, `vendorType`, `regions` FROM
 `vendors` WHERE `regions` LIKE \'' . $region . '\' AND `datesBooked` NOT LIKE
 \'' . mysqli_real_escape_string($date) . '\'  AND `datesUnavailable` NOT LIKE \'' . real_escape_string($date) . '\' ';

请阅读更多关于 sql 注入的信息 - http://en.wikipedia.org/wiki/SQL_injection

于 2015-04-23T06:53:33.300 回答