Задать вопрос

PDO PHP как убрать экранирование в запросе?

Добрый день всем.
Вопрос заключается в следующем есть в базе данных таблица в которой хранятся пути к определенным файлам
например: "/var/www/test/1.txt" , база данных InnoDB.
При запросе:
$dbh = new PDO("mysql:host=$db_host;dbname=$db_name",$db_user,$db_pass);
$dbh->query("SELECT * FROM files WHERE name = '/var/www/test/1.txt'");

Получаю пустой результат, причем тут же выполняю этот запрос через консоль mysql, получаю нужную строку, то же самое если использовать adminer.php или phpMyAdmin.
Если использовать обычный
mysql_query("SELECT * FROM files WHERE name = '/var/www/test/1.txt'");

Так же возвращает то что нужно.
Мое предположение что PDO как-то экранирует или еще что-то делает с данной строкой, возможно ли это как-то отключить.
Заранее спасибо.
  • Вопрос задан
  • 4506 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
janson
@janson
PHP-разработчик
Вы сделали запрос через PDO, но не разобрали результат.
Метод query возвращает вам обьект PDOStatement из которого нужно вытащить результаты, например следующим образом:

$dbh = new PDO("mysql:host=$db_host;dbname=$db_name",$db_user,$db_pass);
$statement = $dbh->query("SELECT * FROM files WHERE name = '/var/www/test/1.txt'");
$result = $statement->fetchAll(\PDO::FETCH_ASSOC);
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
FanatPHP
@FanatPHP
Чебуратор тега РНР
А теперь, по традиции, правильный ответ, от единственного здесь человека, который видел PDO, а не просто слышал краем уха, что пацаны на раёне рассказывали.

$dbh = new PDO(
	"mysql:host=$db_host;dbname=$db_name;charset=$db_charset",
	$db_user,$db_pass, array(
		PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
		PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ
	));
$sql  = "SELECT * FROM files WHERE name = '/var/www/test/1.txt'";
$data = $dbh->query($sql)->fetchAll();

при появлении ошибки - прочесть и исправить.

Да - и, разумеется, никакого "экранирования" PDO в "запросах" не делает. И поэтому убирать ничего не нужно. Рекомендую применять фантазию при общении с противоположным полом. А в программировании старайтесь придерживаться фактов. И начинать избавляться от любого экранирования следует только после того, как увидели его собственными глазами.
Ответ написан
Возьмите за правило - "все, что передается в условия запроса, проходит через binding"
Ответ написан
$statement = $dbh->prepare("SELECT * FROM files WHERE name = :name");
$statement->execute(array(":name" => '/var/www/test/1.txt'));
$result = $statement->fetch();
Ответ написан
Может быть у вас соединение с базой не установилось случаем?

Другие запросы выполняет?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы