Доступность PHP & quot; [] \ Запрос с mySQL

Это мое первое 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\' ';

1

Решение

Попробуй это,

$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);

Надеюсь, это работает.

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.

0

одинарные кавычки не позволяют использовать переменные внутри. вместо этого используйте двойные кавычки:

$sql = "SELECT `vendorName`, `vendorBio`, `vendorType`, `regions` FROM
`vendors` WHERE `regions` LIKE \'$region\' AND `datesBooked` NOT LIKE
\'$date\'  AND `datesUnavailable` NOT LIKE \'$date\' ";
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\'";
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.

0