Wordpress $wpdb проблемы при добавлении записи.

12
voodoo911
На сайте с 11.03.2008
Offline
157
898

Привет всем знатокам Wordpress

Пол дня не могу найти проблему.

Есть mysql запрос для добавления в БД

Суть скрипта в том что есть два урл, скрипт берет содержимое УРЛ и доабавляет его в бд в колонку

page_data

Содержимое страницы беру через wp_remote_get.

$res = wp_remote_get( $http, $args );

$resp_src = $res["body"];

Далее в добавляю содержимое в БД

$res = $wpdb->insert( $table_name,

array( 'date' => time(), 'site_id' => $url_id, 'response' => $resp_code, 'ping' => $load_time, 'page_data' => $resp_src , 'replace' => serialize( $out_array_kw ) ),

array( '%s', '%s', '%s', '%s', '%s', '%s' ) );

Для УРЛ 1 все прекрасно работает и содержимое добавляется в БД, для второго - нет. $res возвращается как false

$wpdb->show_errors();

$wpdb->print_error();

Не возвращает ошибки.

Думал трабл в том что размер страницы не влазит в БД но поле longtext тоесть проблем не должно быть.

Была задумка что есть какие то не правильные символы которые мешают запросу - пробовал добавить - htmlentities($resp_src ) - запрос выполняется и запись добавляется но поле пустое.

Пробовал переписать запрос через $wpdb->prepare

$wpdb->prepare("INSERT INTO $table_name (`id`, `date`, `site_id`, `response`, `ping`, `page_data`, `replace`) VALUES (NULL, %s, %s, %s, %s, %s, %s);", time(), $url_id, $resp_code, $load_time, $resp_src, serialize( $out_array_kw ) )

но результат тот же.

Но если дампонуть результат $wpdb->prepare и выполнить запрос через phpmyadmin sql - то все добавляется правильно.

Может кто подсказать хоть в какую сторону рыть? А то уже совсем застрял.

Спасибо всем и + в карму :)

S3
На сайте с 29.03.2012
Offline
361
#1

http://wordpress.stackexchange.com/questions/179058/why-wpdb-show-errors-and-print-error-is-showing-an-output-even-if-the-quer

Все таки стоит сначала разобраться с ошибкой

voodoo911
На сайте с 11.03.2008
Offline
157
#2

Пробовал, возвращает пустую строку

S3
На сайте с 29.03.2012
Offline
361
#3

voodoo911, А если убрать в вашем запросе null? Полчается же, что вы запрашиваете 7 парамеров а передаете только 6

voodoo911
На сайте с 11.03.2008
Offline
157
#4

(`id`, `date`, `site_id`, `response`, `ping`, `page_data`, `replace`) = 7

(NULL, %s, %s, %s, %s, %s, %s) = 7

---------- Добавлено 26.09.2016 в 09:26 ----------

Проблему создает содержимое веб страницы. Если заменить его на любую строку - все работает.

S3
На сайте с 29.03.2012
Offline
361
#5

voodoo911, я уже не помню, но если id - autoincrement, его же можно вообще не передавать? Сам добавится при создании записи (может и путаю, но вреде так делал.

Но видимо это не совсем относиться к сути.

Мне кажется наиболее верной идея очищать предварительно htmlspecialchars($resp_src), а потом у базу передавать уже в правильном формате. Вся проблема в нужной функции

voodoo911
На сайте с 11.03.2008
Offline
157
#6

При использовании htmlspecialchars($resp_src) в базу добавляется но поле пустое

S3
На сайте с 29.03.2012
Offline
361
#7

voodoo911, а как вы делаете? Запихните результат в промежуточную переменную и посмотрите, что в ней? Типа


$data = htmlspecialchars($resp_src);
echo $data;

и в базу писать $data, если не пустая.

voodoo911
На сайте с 11.03.2008
Offline
157
#8

в переменной обработанная строка, а в бд добавляет пустое поле. Чудо чудное, диво дивное

S3
На сайте с 29.03.2012
Offline
361
#9

Даже интересно стало.

А нарисуйте весь вашь запрос в варианте с

$res = $wpdb->insert...

и как вы делаете wp_remote_get подробно - какие аргументы

voodoo911
На сайте с 11.03.2008
Offline
157
#10

Проблема не в функции, проблема в содержимом удаленного сайта. Скрипт обрабатывает несколько УРЛов. Скрипт прекрасно обрабатывает все УРЛы кроме одного. То-есть что-то в содержимом страницы данного УРЛа нарушает работу. Вот и пытаюсь разобраться как еще можно обработать входящий контент чтобы все работало и для этого сайта.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий