У меня есть страница, project.php
. Я пытаюсь реализовать пули. Поэтому давайте скажем, что у меня есть запись в базе данных, которая называется A Project
, а slug - a-project
. Вот код PHPСлизы, разрушающиеся после первого слова
$slug = $_GET['name'];
try {
$sql = "SELECT id FROM projects WHERE slug = '" . $slug . "' AND display = 1";
$s = $pdo->prepare($sql);
$s->execute();
} catch(PDOException $e) {
die("Failed to run query: " . $e->getMessage());
}
Это работает. Но когда я решил добавить в правила перезаписи в .htaccess так:
RewriteRule ^projects/([0-9a-zA-Z]+) project.php?name=$1 [NC,L]
Это результат:
Failed to run query: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Повторяя из запроса возвращает SELECT id FROM projects WHERE slug = 'a' AND display = 1
, который при запуске в PhpMyAdmin работает отлично, как и вы бы ожидали, что это нормально, без правила перезаписи.
Использование var_dump($_GET);
возвращает array(1) { ["name"]=> string(1) "a" }
Это происходит только на несколько слизнях слова, если пробковый проект просто project
работает
Почему мое правило переписывания разрывая слизняк после первого слова и развращает мой запрос , и как я могу это исправить?
Пожалуйста, используйте подготовленные данные, как вы уже используете pdo. Вы подвергаетесь риску [** 'mysql injection' **] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) – Fabio