Невозможно выполнить запрос с помощью PHP, где тот же запрос нормально работает в phpmyadmin - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь удалить строки из таблицы ... Я использую этот код:

$query = "Delete from usertour where tourID = $idnum and name LIKE '%$session%' ";

И строка никогда не удалялась, если идентификатор и сессия правильные

Я пытался выполнить тот же запрос в phpmyadmin следующим образом:

Delete from usertour where tourID = 1 and name LIKE '%test@hotmail.com%' 

Когда я выполняю таким образом, это работает ... проблема, вероятно, в этой части "% $ session%", я пытался исправить, но не могу.

Любая помощь?

enter image description here

вот какая-то база данных ... Я подключился к правой базе данных, потому что я использую php и mysql в несколькихместа, кроме этого ... и проблема только в "% $ session%" ... все остальное работает хорошо, и он выполняет запрос, но не может соответствовать поданному имени.

Если я выведу$ idnum, $ session и $ query переменные, которые я получаю:

enter image description here

Ответы [ 4 ]

0 голосов
/ 21 мая 2018

Единственный надежный способ сделать это с помощью подготовленных заявлений.Способ их воспроизведения немного различается в зависимости от того, какой слой драйвера базы данных вы используете (mysqli против PDO), но обычно выглядит так:

$stmt = $db->prepare("DELETE FROM usertour WHERE tourID=? AND name=?");

Где вы тогда связываете двазначения перед выполнением этого запроса.Обратите внимание, что name=? используется здесь специально, потому что LIKE предназначен для достаточно близких ситуаций, чего вы здесь не хотите.При использовании LIKE вы удалите name@example.com, а также name@example.com.au, два совершенно разных адреса электронной почты.

Если в поле электронной почты есть пробелы, которые вы используете LIKE чтобы игнорировать проблему грязных данных, вы должны очистить свои данные.Не усугубляйте ситуацию, разбивая на слои такие хаки, как LIKE.

Если по какой-либо причине у вас есть пробелы во входных данных, избавьтесь от них перед выполнением запроса с использованием trim функция:

$session = trim($session);

При выполнении запроса вы будете делать что-то подобное для mysqli:

$stmt->bind_param("is", $idnum, $session);
$stmt->execute();

Или это для PDO:

$stmt->execute([ $idnum, $session ]);
0 голосов
/ 21 мая 2018

Вы добавили пробелы в переменную $ session в соответствии с вашей картинкой.

Также, согласно вашим примерам, вам не нужно использовать LIKE и подстановочные знаки.

0 голосов
/ 21 мая 2018

enter image description here
php преобразует ваше предложение в mysql, поэтому вы можете попробовать это: $ query = "Удалить из пользовательского тура, где tourID = $ idnum и имя LIKE% {$ session}%";

0 голосов
/ 21 мая 2018

Попробуйте экранировать переменную сеанса в соответствии с драйвером sql.Пример MySQL ниже.

$query = "DELETE FROM `usertour` WHERE `tourID` = '".$idnum."' AND `name` LIKE '%".mysql_real_escape_string($session)."%' ";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...