#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()