Строка, возвращенная из curl, не вставляется в MySQL

#php #mysql #curl

#php #mysql #curl

Вопрос:

Я получаю строку, используя curl:

 $ch = curl_init();    
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_URL,"https://$URL");  
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $arr);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$result = curl_exec($ch);    
curl_close ($ch);
  

и затем я обновляю таблицу в MySQL с помощью этой строки:

 $query = "UPDATE $table SET code='$result' WHERE id=$id";
$result = mysql_query($query)or die("Update query failed : " . mysql_error());
  

проблема в том, что столбец пуст после обновления. Если я повторяю $ result, я вижу строку в браузере, поэтому я знаю, что она поступает из curl, и если я ввожу строку сам (вместо использования curl $ result), то она также вставляется нормально. Я перепробовал все возможные комбинации очистки строк, о которых только мог подумать:

 mysql_real_escape_string(htmlentities($result));
  

Но по-прежнему нет кости. Есть ли что-то особенное в возвращаемой curl строке, что помешало бы ее вставке в MySQL?

кстати, возвращаемая строка выглядит следующим образом: ABC *DEF*12345ABC

РЕШЕНИЕ

Следуя данному совету, оказалось, что curl $ result имеет n в начале, который я не смог увидеть, пока не повторил запрос $. Я смог быстро исправить это с помощью str_replace(), чтобы удалить n.

Комментарии:

1. Можете ли вы повторить строку? Какой тип данных code ?

2. Вы должны сохранить mysql_real_escape_string() кстати, но htmlentities() здесь это не понадобится. (Лучше это делать при выводе поля.)

3. можете ли вы вставить результат присвоения $query?

Ответ №1:

Я бы немного изменил код следующим образом, чтобы добавить некоторую отладку:

 $query = "UPDATE $table SET code='$result' WHERE id=$id";
echo "query='{$query}'<br>n";

$result = mysql_query($query)or die("Update query failed : " . mysql_error());

echo "rows=". mysql_affected_rows() ."<br>n";
  

Убедитесь, что запрос выглядит корректно, и попытайтесь запустить его из консоли MySQL или phpmyadmin, workbench и т.д. И проверьте, не возникают ли какие-либо ошибки при запуске таким образом. Когда вы запускаете его с консоли, посмотрите очень внимательно, генерируются ли какие-либо предупреждения при обновлении.

Комментарии:

1. Вы попали в точку. Он проверил $result, но проверил ли он $ id? Возможно, это обновление неправильной строки.

2. Спасибо за этот совет. Оказывается, в начале строки был n, который я быстро исправил с помощью str_replace()