2012-01-16 3 views
-1

Я использую функцию .Jquery autocomplete, и я пытаюсь выяснить, где можно положить mysql_real_escape_string(). Я пробовал несколько разных идей, но я просто не уверен. Я получаю ошибку ...Как бы добавить mysql_real_escape_string() к этому QUERY?

Warning: mysql_real_escape_string(): Access denied for user 'www-data'@'localhost' 

Когда я использую $ac_term = mysql_real_escape_string("%".$_GET['term']."%"); Я даже не уверен, что правильный способ использовать его.

Вот что у меня есть ...

<?php 
if (!isset($_SESSION)) { 
    session_start(); 
} 


try { 
    $conn = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass); 
} 
catch(PDOException $e) { 
    echo $e->getMessage(); 
} 

$return_arr = array(); 

if ($conn) 
{ 
    $ac_term = "%".$_GET['term']."%"; 

    $query = "SELECT 

    CONCAT_WS('', '(',User_ID,') ', UserName, ' (',AccessLevel,')') AS DispName, 
    User_ID, UserName, AccessLevel 

    FROM Employees 
    WHERE UserName LIKE :term 
    OR User_ID LIKE :term 
    OR AccessLevel LIKE :term 

"; 

    $result = $conn->prepare($query); 
    $result->bindValue(":term",$ac_term); 
    $result->execute(); 

while ($row = $result->fetch(PDO::FETCH_ASSOC)) { 

     $row_array['value'] = $row['DispName']; 
     $row_array['User_ID'] = $row['User_ID'];  
     $row_array['UserName'] = $row['UserName']; 
     $row_array['AccessLevel'] = $row['AccessLevel']; 

     array_push($return_arr,$row_array); 
    } 

} 
$conn = NULL; 
echo json_encode($return_arr); 
?> 

Любые предложения?

+0

возможно это должно помочь - http://stackoverflow.com/questions/6191801/using-mysql-real-escape-string-with-pdo-no-connection-to-localhost-server – Abhay

+1

Подсказка: вы могли бы используйте PDO :: FetchAll вместо этого или в цикле –

ответ

4

Вы не должны добавлять mysql_real_escape_string() для этого запроса на всех.
Просто оставьте свой код как есть.

+0

его вопрос заключался в том, как использовать 'mysql_real_escape_string()' не как реализовать параметризованные запросы. –

+0

«Как бы добавить mysql_real_escape_string() ** к этому QUERY? **« На самом деле это было. Идите фигуру. –

-1

Сначала вам нужно создать соединение. mysql_real_escape_string() опирается на активное соединение MySQL; он пытается предположить, что ваши учетные данные позволят вам скорее подключиться к локальному хосту.

создать активное, аутентифицированное соединение mysql до использования mysql_real_escape_string(), и по крайней мере это сообщение об ошибке должно исчезнуть.

Кроме того, лучший способ использовать это будет:

$ac_term = mysql_real_escape_string($_GET['term']); 

с запросом похожий

$query = "SELECT ... FROM ... WHERE column LIKE '%$ac_term%'"; 
+1

, который подтвердил это? –

+0

... и если вы имеете вниз, возможно, объяснение? Я думаю, вы бы знали лучше. –

+0

errr ... Мне любопытно, вы прочитали вопрос? –

0

Подготовленные параметры параметров не обязательно должны быть экранированы; это одна из главных причин для них.

Некоторые драйверы PDO в настоящее время не поддерживают repeating a named parameter. В зависимости от того, какая версия PHP установлена, вам может потребоваться создать отдельный параметр для каждого значения.

1

Я считаю, что mysql_real_escape_string не подходит для использования с PDO, для избежания использования PDO quote.

Как указано в документации, спасаясь строка не является необходимым для prepare и execute заявления:

Calling PDO :: подготовить() и PDOStatement :: Execute() для операторов, которые будут выпущены несколько раз с разными значения параметров оптимизируют производительность вашего приложения, позволяя водителю согласовывать клиентское и/или серверное кэширование плана запроса и метаинформации и помогает предотвратить атаки SQL-инъекций, устраняя необходимость вручную указывать параметры.

+0

+1 это лучший ответ, чем другие. –

Смежные вопросы