Это мое первое PHP-приложение, которое я когда-либо делал; Я начал изучать PHP на этой неделе, так что не убивайте меня, хорошо? 😉
Я пытаюсь использовать этот скрипт, чтобы найти диджеев в нашей базе данных. По какой-то причине, когда я вручную вводить регион, как:
'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\' ';
Попробуй это,
$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);
Надеюсь, это работает.
Вы используете одинарные кавычки (‘). Переменные не будут анализироваться. Либо выведите свои переменные за пределы кавычек, либо используйте двойные кавычки («).
$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.
одинарные кавычки не позволяют использовать переменные внутри. вместо этого используйте двойные кавычки:
$sql = "SELECT `vendorName`, `vendorBio`, `vendorType`, `regions` FROM
`vendors` WHERE `regions` LIKE \'$region\' AND `datesBooked` NOT LIKE
\'$date\' AND `datesUnavailable` NOT LIKE \'$date\' ";
Это из-за разницы между одинарными и двойными кавычками.
Одинарные кавычки не «читают» переменные внутри них, а просто печатают то, что вы пишете. Двойные кавычки вместо этого читают значение переменной и заменяют написанную вами строку.
Маленький пример:
$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\'";
Пожалуйста, не используйте прямые переменные для запросов 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.