2014-02-05 4 views
0

У меня есть следующий код PHP:Ошибка ввода данных в базу данных

foreach($html->find('dl[class=movie-info]') as $info) { 

    for($i = 0; $i <= 20; $i++) { 

    $contenido = $info->find('dt',$i)->plaintext; 

    if($contenido == 'A&ntilde;o'){ 
     $year = utf8_encode($info->find('dd',$i)->plaintext);}}} 

(код имеет больше, если функции)

И в MySQL таблицу, в которой я положил содержимое переменных ....

Проблема с контентом $ year, мне нужно заполнить его небольшим (5) без знака.

Когда я использую

$con = mysqli_connect("localhost","root","tdguchiha","phpbb3"); 
mysqli_query($con,"INSERT INTO pablo (forum_id, calidad, titulo, caratula, sinopsis, pais, director, reparto, genero) VALUES ('$forum_id', '$calidad', '$titulo', '$img', '$sinopsis', '$pais', '$director', '$reparto', '$genero')"); 
mysqli_close($con); 

Все содержание вставляется, но когда я пытаюсь вставить $year в Ano с типом smallint(5) unsigned ничего не происходит, не создается ни одна строка ...

как я могу конвертировать $ year к числу (оно должно быть числом), чтобы заполнить его в этой колонке? или мне нужно изменить тип столбца?

PD: Я учусь сейчас, чтобы "играть" с MySQL

благодаря

+0

Что ошибка MySQL вы получаете? –

+0

не отображается ошибка, но логично думать, что есть один, потому что информация не добавляется – minato

+0

Смотрите мой ответ edit для ошибки catching ... –

ответ

0

Там нет никакой разницы в MySQL между числом и строкой при выполнении запросов. Убедитесь, что вы включили имя столбца в списке всех столбцов:

mysqli_query($con,"INSERT INTO pablo (forum_id, calidad, titulo, caratula, sinopsis, pais, director, reparto, genero, year) VALUES ('$forum_id', '$calidad', '$titulo', '$img', '$sinopsis', '$pais', '$director', '$reparto', '$genero', '$year')"); 
                                 ^notice year the column                        ^now the actual value 

Просто заменить год в колонке раздела с названием вашего столбца MySQL.

+0

Проблема в том, что когда я помещаю столбец «año» и значение $ year, строка не добавляется ... – minato

+1

Покажите нам этот код. Нет смысла смотреть на ваш рабочий код. Дайте нам свои сообщения об ошибках. –

+0

@Damien Возможно, это имеет какое-то отношение к enye в 'año'. – Leng

0

Возможно попробовать приведения его в целое, вместо использования utf8_encode:

$year = intval($info->find('dd',$i)->plaintext); 

Или, в дополнение к его:

$year = intval(utf8_encode($info->find('dd',$i)->plaintext)); 

Можете привести нам пример данных?

EDIT: Дамиан прав, intval() не должен иметь значения.

Try вторя из содержимого вместо, и убедившись, что это реальное число в строке, чтобы сделать некоторые отладки:

if($contenido == 'A&ntilde;o'){ 
    $year = utf8_encode($info->find('dd',$i)->plaintext); 
    echo $year.'<br />';}}} 
+0

информация была выбрана с filmaffinity.com/es film page like view -source: http: //www.filmaffinity.com/es/film731232.html – minato

+0

@minato Это все хорошо и хорошо, но повторите его, чтобы отладить то, что вы на самом деле получаете в своем скрипте. – Leng

0

Перед отправкой на вопрос StackOverflow, идентифицировать любые ошибки-коды/ошибки-сообщения и размещать их с вопросом:

/* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

И:

if (! mysqli_query($link, "SELECT ...")) { 
    printf("Errorcode: %d\n", mysqli_errno($link)); 
} 

Больше на PHP doc site.

+0

Я получил эту ошибку [ссылка] (http://postimg.org/image/o01yi175b/) Я не знаю, что это значит – minato

0

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

A smallint is between -32768 and 32767 signed, or 0 and 65535 unsigned. 

The (5) represents the display width of the field - if you will try to put 90000 you will be rejected. 

В вашем случае это не должно быть (значение лет я предполагаю) проблемы, но показать нам данные, которые вы пытаетесь вставить.

Я думаю, что вы разбираете какой-либо контент с помощью simple_html_dom - убедитесь, что все полученные данные равны , как вы ожидали, прежде чем вставлять их в БД.

также: Попробуйте изменить тип в целом (5), а теперь скажите нам ....

Это будет легче увидеть запрос, который вы используете (с указанием года) и выборкой данных.

Для Loging ошибок и использования дисплея:

$execute = mysqli_query($con,"INSERT INTO pablo (....your query..... ") 
     or 
      printf("Errormessage: %s\n", mysqli_error($con)); 

Весело

+0

это мой simple_html_dom.php [ссылка] (http://pastebin.com/pubDD3tj), это мой application.php (где я получаю данные и делаю запросы) [ссылка] (http: /pastebin.com/r2acxGWY), и это исходный код filmaffinity [link] (http://pastebin.com/MaPurGHg) надеюсь, что это будет информация, которую вы задаете – minato

+0

после добавления этих строк, я получил эту ошибку [ссылка ] (http://postimg.org/image/o01yi175b/) Я не знаю, что это значит – minato

+0

Нет, это не то, что нам нужно - попробуйте добавить 'echo htmlentities ($ year);' в ваш цикл FOR, я подозреваю данные, которые вы являются не годовым значением или включают некоторые html-объекты (  &gr; и т. Д.), Которые не нужны - также ссылка на целевую страницу (что может помочь синтаксический анализ) другим способом является использование 'inval ($ year)' и тем самым PHP попытается разобрать строку до значения int. –

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