mysql_real_escape_string с Zend - PullRequest
       10

mysql_real_escape_string с Zend

5 голосов
/ 31 декабря 2011

Я занимаюсь разработкой веб-приложения с использованием Zend Framework.Для операторов выбора я использовал следующий способ.

Пример:

public function getData($name)
{
  $sql = "SELECT * from customer where Customer_Name = '$name'";
  return $this->objDB->getAdapter()->fetchAll ($sql);
}

Это работает отлично.Но если я отправлю имя клиента как: colvin's place, запрос не будет выполнен.И я знаю, что это из-за одинарной кавычки.

Ранее я использовал PHP-функцию addlashes.Но я видел, что это не очень хороший способ сделать это.На этот раз я использовал mysql_real_escape_string функцию PHP.

Проблема заключается в том, что говорится следующее предупреждение.

Warning</b>: mysql_real_escape_string() [<a href='function.mysql-real-escape-string'>function.mysql-real-escape-string</a>]: Access denied for user 'ODBC'@'localhost' (using password: NO)

Это связано с тем, что функция mysql_real_escape_string нуждается вподключение к базе данных, открытой mysql_connect.У меня вопрос, как я могу использовать это с * Zend_DB * классами.Мне нужно всегда использовать пользовательские запросы выбора.Оцените ваши другие предложения, если таковые имеются.

Спасибо

Ответы [ 4 ]

8 голосов
/ 31 декабря 2011

Вы можете использовать функцию quote(), предоставляемую Zend_Db:

http://framework.zend.com/manual/en/zend.db.adapter.html#zend.db.adapter.quoting.quote

2 голосов
/ 31 октября 2014

Вы также можете использовать привязку параметров, тогда метод будет выглядеть так:

public function getData($name)
{
  $sql = "SELECT * from customer where Customer_Name = :name";
  return $this->objDB->getAdapter()->fetchAll ($sql, ['name' => $name]);
}

Тогда ваши данные будут автоматически экранированы

1 голос
/ 24 февраля 2016

У меня была эта проблема, я использовал этот способ и работает правильно:

Вы можете использовать quote():

Метод quote () принимает один аргумент - скалярное строковое значение. Он возвращает значение со специальными символами, экранированными способом, соответствующим используемой СУБД, и окруженным разделителями строковых значений. Стандартный разделитель строковых значений SQL - это одинарные кавычки (').

Но quote возвращает строку с 'string' (вернуть ее внутри кавычки), например, я получаю строку от пользователя из текстового поля ввода (или по URL в методе GET)

$string = $this->parameters['string']; // This is like $_POST or $_GET
$string = $this->db->quote($string);
$string = substr($string, 1, strlen($string)-2);   
//The above line will remove quotes from start and end of string, you can skip it

Теперь мы можем использовать это $string, и это похоже на то, что mysql_real_escape_string возвращает

1 голос
/ 31 июля 2012

У меня была такая же проблема, и это решение прекрасно работает для меня.Я надеюсь, это поможет.Вы можете сделать что-то вроде этого:

$quote_removed_name = str_replace("'","''",$name);

и напишите свой запрос следующим образом:

$sql = "SELECT * from customer where Customer_Name = '$quote_removed_name'";
...