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