2015-06-25 2 views
-1

В текстовом файле mysql хранится некоторый текст. Он содержит символы.Escaping 'из массива mySQL

Попытка избежать этого, чтобы я мог получить результаты. Все, что имеет "дает ошибку.

review_text с 'ничего не возвращает. Ответ должен быть с mysql_real_escape_string, но это не работает.

while ($row = mysql_fetch_array($result)) { 
    $review = array(); 
    $review["name"] = $row["reviewer_name"]; 
    $review["title"] = $row["review_title"]; 
    $review["content"] = $row["review_text"]; 
    $review["rating"] = $row["review_rating"]; 
    $review["time"] = $row["date_time"]; 
    // push single product into final response array 
    array_push($response["reviews"], $review); 
} 
+2

Вам не нужно избегать его, если оно предназначено для просмотра. Если нет ввода пользователем, я не понимаю, почему вы хотите «убежать» от чего-либо. Если вы действительно этого хотите, тогда используйте 'stripslashes' http://php.net/manual/en/function.stripslashes.php даже тогда, возможно, это не то, что вы хотите. Как я уже сказал, нет необходимости избегать этого, если это просто для показа целей. –

+1

good point @ Fred-ii- Я считаю, что легче использовать подготовленные заявления, не нужно бежать, «stripslashes» и т. Д. Со всеми дополнительными преимуществами – nomistic

+1

* «Все, что имеет' '' дает ошибку. * * Покажите нам, что ошибка. –

ответ

0

Есть несколько способов обработки этого, однако первый из вас нужно прекратить использование устаревших mysql_ расширений. «Устаревшие» означает, что они больше не включены в PHP, и в скором времени перестанет работать, как говорится на официальном сайте PHP здесь: http://php.net/manual/en/function.mysql-fetch-array.php

Предупреждение

Это расширение нежелателен РНР 5.5.0, и будет удалено в будущем в . Вместо этого следует использовать расширение MySQLi или PDO_MySQL. См. Также MySQL: выбор руководства по API и связанных с ним вопросов для получения дополнительной информации о . Альтернативы этой функции включают в себя:

mysqli_fetch_array() 
PDOStatement::fetch() 

Вы можете использовать mysqli_real_escape_string «уйти» переменные, однако это гораздо лучше использовать подготовленные заявления. Либо mysqli_, либо PDO будут работать.

В этом случае, когда вы получаете переменные с помощью выбора, вы можете сделать следующее (неясно, где вы получаете переменные, но давайте использовать это как предположение), вы должны подключиться к своей базе данных следующим образом:

$conn = new mysqli($host, $username, $password, $dbname); 

if ($conn->connect_error) { 
    die("Connection failed: " . $dbc->connect_error); 

$stmt = $conn->prepare(select name, title, content, rating, time from tablename where variable = ?); 
// this is assuming that this is a string, so "s" is used, otherwise use "i" for string 
$stmt->bind_param("s",$variable); 
$stmt->execute(); 
//then you can bind your results into tidy variables all of which have been "escaped" 
$stmt->bind_result($name, $title, $content, $rating, $time); 
$stmt->close(); 

Чтобы получить переменные, insteady использования mysql_fetch_array() вы просто использовать $stmt->fetch();

или как это:

while (stmt->fetch()) { 
    [stuff here] 
} 

voila, ваши переменные довольно чисты. Примечание:, в то время как они будут обрабатывать цитаты, апострофы и т. Д., Они также будут намного более безопасными для защиты от наложения SQL. Вы также можете использовать PDO.

+0

Спасибо. Я реализовал это, и он сработал. – startupking1

+0

Я рад, что смогу помочь. :) Чтобы помочь будущим пользователям, хорошо проверить правильный ответ – nomistic