PHP可用性" [] \使用mySQL查询

时间:2015-04-23 06:02:58

标签: php mysql forms availability

这是我用过的第一个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\' ';

5 个答案:

答案 0 :(得分: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);

希望这有效。

答案 1 :(得分: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 injections

答案 2 :(得分:0)

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

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

答案 3 :(得分: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\'";

答案 4 :(得分: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