2013-05-03 3 views
1

Вот часть моей вставки кода, который беспокоит меня:Невозможно вставить ссылку в базе данных MySQL

$recepient="[email protected]"; 
$text="Please track: http://wwwapps.ups.com/WebTracking/processInputRequest?HTMLVersion=5.0&loc=en_US&Requester=UPSHome&tracknum=123456789&AgreeToTermsAndConditions=yes&ignore=&track.x=24&track.y=9"; 
$date="2013-05-03 08:12:20"; 
$through="mail"; 
$status=1; 
$q = "INSERT INTO `messages` (`recepient`,`text`,`date`,`through`,`status`) VALUES('".mysql_real_escape_string($to)."','".mysql_real_escape_string($text)."','".date("Y-m-d H:i:s")."','".mysql_real_escape_string($rowuser['through'])."','".intval($status)."')"; 
try {$db->query($q);} catch(PDOException $ex) {echp" Error: ".$ex.);} 

Если удалить ссылку из $ текстовой переменной я могу увидеть данные, добавленные в базу данных. Но так, как мне нужно, чтобы добавить ссылку - скрипт перестает сообщать о каких-либо ошибках.

+0

Извините за переменный беспорядок: При этом получатель =, но идея является только $ text здесь. – Vasiliy

+0

вы можете предоставить функцию 'mysql_real_escape_string' –

+0

@ Давид Старки - [From php.net] (http://php.net/manual/en/function.mysql-real-escape-string.php) –

ответ

0

Проблема с "?" знак $ текст переменная. Он обрабатывается как заполнитель , когда он помещается в запрос, а запрос $ db-> ожидает массив переменных. Решения использовать заполнитель вместо переменных $ текстового и представить $ Text переменной Params:

$ar[0]=$text; 
$q = "INSERT INTO `messages` (`recepient`,`text`,`date`,`through`,`status`)"; 
$q.= " VALUES('".$to."',?,'".date("Y-m-d H:i:s")."','".$through."',".$status.")"; 
$db->query($q,$ar); 
0

использование PDO «s мощные подготовленные заявления:

$q = "INSERT INTO messages (recepient,text,date,through,status) "; 
$q .= "VALUES (:to,:text,:date,:through,:status)"; 

$dbinsert = $db->prepare($q); 
$dbinsert->execute(array(
    ':to' => $recipient, 
    ':text' => $text, 
    ':date' => $date, 
    ':through' => $through, 
    ':status' => $status)); 

Это должно сделать это.
Позвольте PDO позаботиться об ускорении.

+0

Запрос не работал для меня ни в одном случае с коротким текстом или ссылкой в ​​'text' – Vasiliy

+0

Похоже, что это решение проблемы, но я не могу заставить ее работать, она останавливается на' $ db-> prepare' – Vasiliy

+0

@ В любом случае вам необходимо настроить PDO для подключения к базе данных. Ты сделал это? – michi

0

Казалось бы, вы смешиваете библиотеки баз данных или сами обернули вещи.

Если вы используете что-то вроде MySQLi или PDO для ->query() вызова, то mysql_real_escape_string() будет НЕ работы. m_r_e_s() требует активного подключения к БД для работы. Соединения, установленные в mysql, mysqli и PDO, равны NOT, которые можно использовать между библиотеками.

Это означает, что ваши m_r_e_s() вызовы возвращают логическое значение FALSE для отказа, и ваш запрос будет выглядеть на самом деле:

$q = "INSERT .... VAALUES ('', '', '', etc...)"; 
+0

Вернет ли он false только для текста, содержащего ссылку? Поскольку он отлично работает с текстом типа «тестовый текст». – Vasiliy

+0

Я удалил запросы m_r_e_s, но по-прежнему не помогал. Однако мне удалось поймать ошибку: Query parts! = Params parts: q: 0; p: 1 – Vasiliy

0

Что размер text столбца в базе данных? В основном это не причина, но я заметил, что ваш $text - char long.

+0

Ограничение длины для столбца «текст». Более того, первое, что я попробовал, - это добавить данные через запрос phpmyadmin SQL, и он работал нормально. – Vasiliy

+0

О, я не был уверен, что вы задали свой тип текста, извините за это –

+0

Спасибо за внимание! :) – Vasiliy

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