2015-12-08 2 views
-1

Я использую «стандартные» запросы mysqli, но решил использовать подготовленные операторы для большей безопасности. Все работает отлично, за исключением того, что новые строки удаляются, когда данные добавляются в базу данных. Вот пример некоторого запроса:mysqli подготовленные операторы удаляют новые строки

$stmt=mysqli_prepare($GLOBALS["mysqli"], "UPDATE products SET product_description=? WHERE product_id=?"); 
if ($stmt) 
    { 
    mysqli_stmt_bind_param($stmt, "si", $product_description, $product_id); 
    mysqli_stmt_execute($stmt); 
    mysqli_stmt_close($stmt); 
    } 

$ PRODUCT_DESCRIPTION является переменным из текстового поля (представленного через форму POST), и у него есть новые линии. При добавлении данных в базу данных, он выглядит следующим образом:

FIRSTLINE \ г \ nSECONDLINE

Я знаю, что нет ничего плохого в том виде или сам код, потому что если я использую этот запрос:

mysqli_query($GLOBALS['mysqli'], "UPDATE products SET product_description='$product_description' WHERE product_id='$product_id'); 

Все отлично работает, данные в базе данных выглядит следующим образом:

first_line

SECOND_LINE

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

+0

Как выглядят ваши данные, когда вы храните их в базе данных с помощью 'подготовленных'? – uruloke

+0

что-то еще вызывает это, и вы не показываете нам, часть, где вы назначаете переменную массиву POST и как именно она вводится в базе данных –

ответ

0

Я смог исправить это. Функция mysqli_real_escape_string применялась ко всем переменным, представленным через форму. Удаление этой единственной функции решило проблему.

В случае, если кто-то сталкивается с подобными проблемами, просто посмотрите на свой код и удалите функцию mysqli_real_escape_string - он отлично работает со стандартными запросами, но разбивает подготовленные операторы.

+0

где 'mysqli_real_escape_string()' в вашем коде? 'mysqli_real_escape_string()' и подготовленные функции - это два разных животных. –