2016-07-16 3 views
0

Я использую PDO с PHP для отправки запросов на мой SQL-сервер. Мне нужно использовать LIKE условие, чтобы проверить имя пользователя, чтобы убедиться, что это разрешено (например, она не содержит каких-либо запрещенных слов), поэтому я использую этот SQL запрос ...SQL throwing Синтаксис Ошибка при использовании LIKE с параметрами

SELECT * FROM `table` WHERE (`name` LIKE %?%); 

Я затем вставить с PDO в параметре позже, как это ...

$statement->bindParam(1, $username) 

когда я пытаюсь запустить это, я получаю эту ошибку ...

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '%'dibdibs'%)' at line 1' in C:\xampp\htdocs\scripts\sql.php:57 Stack trace: #0 C:\xampp\htdocs\scripts\sql.php(57): PDOStatement->execute() #1 C:\xampp\htdocs\api\users.php(30): dibdibs\pdo->query('SELECT * FROM `...', Array) #2 {main} thrown in C:\xampp\htdocs\scripts\sql.php on line 5

код PDO отлично работает для других запросов, когда я используя вместо этого = f LIKE, но это бросает вышеуказанную ошибку, когда я пытаюсь использовать предложение LIKE.

Я установил полный код на Pastebin, если вам нужно его проверить. Я использую GET для получения данных, поскольку я использую это с AJAX (который также работает нормально), но имя пользователя, которое я попробовал, это «dibdibs», который отлично работает в других запросах.

+4

Используйте 'имя LIKE? ', А затем связать что-то вроде этого' $ Оператор-> bindParam (1, «% $ username% ")' –

+1

imo, всегда имеет местозаполнитель, окруженный пробелами. Это дает понять программисту и синтаксическому анализатору, что это единственный токен. И облегчает ли чтение кода? –

ответ

1

Использовать этот

U может использовать любой из этих двух

$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?'); 
$query->execute(array('%value%')); 

while ($results = $query->fetch()) 
{ 
    echo $results['column']; 
} 

// without loop 

$query = "SELECT * FROM tbl WHERE address LIKE ?"; 
$params = array("%$var1%"); 
$stmt = $handle->prepare($query); 
$stmt->execute($params);