Двойные кавычки в одинарных кавычках из таблицы

В моей таблице у меня есть запрос:

$sql="SELECT * FROM `jom_x1_organizatori`
WHERE Organizator='".$sta_dalje."' Order by `Struka`,`Zanimanje`";

$sta_dalje= $ _ POST [«state_id»] из другой таблицы и значение:

  1. ГУ Гимназија са техничким школама Дервента
  2. «ПРИМУС» Градишка

В случае 1 работает.

Как сделать запрос?

0

Решение

Первое. Никогда не создавайте запрос, объединяя строку запроса с пользовательским вводом! Если вы это сделаете, тогда экранируйте ввод с помощью специальной функции библиотеки (mysqli_real_escape_string например). Не спасаясь, вы откроете потенциальную дыру в безопасности (называется SQL-инъекция).

"ПРИМУС" Градишка не работает, потому что после объединения запрос будет недействительным. А теперь представьте, что произойдет, если я отправлю следующий вход: '; DROP TABLE jom_x1_organizatori; --

Ваш запрос будет:

SELECT * FROM `jom_x1_organizatori`
WHERE Organizator=''; DROP TABLE jom_x1_organizatori; --' Order by `Struka`,`Zanimanje`

Всякий раз, когда вы можете использовать prepared statements связывать параметры (и позволить библиотеке выполнять тяжелую работу), но всегда экранировать и проверять ввод (используя подготовленные операторы, экранирование выполняется библиотекой)!

$sta_dalje = (sting)$_POST["state_id"]; // Do filtering, validating, force type convertation, etc!!

// Prepare the statement (note the question mark at the end: it represents the parameter)
$stmt = $mysqlLink->mysqli_prepare(
"SELECT * FROM `jom_x1_organizatori` WHERE Organizator = ?");

// Bind a string parameter to the first position
$stmt->bind_param("s", $sta_dalje);

Для получения дополнительной информации о подготовленных заявлениях:

Обратите внимание, что старый mysql расширение не рекомендуется, не используйте его, если не нужно!

Просто примечание

Не использовать SELECT * FROMВсегда перечисляйте столбцы. Это предотвращает запрос ненужных данных, и ваш код будет более устойчивым к изменениям базы данных, плюс отладка будет немного проще.

1

Другие решения

Используйте escape-строку

$sta_dalje = mysqli_real_escape_string($con, $_POST["state_id"]);

И ваше состояние может быть просто

 Organizator='$sta_dalje'
0

По вопросам рекламы [email protected]