将数据放入数据库时​​出错

时间:2014-02-05 21:44:29

标签: php mysql sql types

我有以下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内容,我需要用smallint(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插入类型为smallint(5) unsigned的año时没有任何反应,则不会创建任何行...

如何将$ year转换为数字(必须是数字)才能填入该列?或者我需要更改列类型?

PD:我现在正在学习使用mysql“玩”

谢谢

4 个答案:

答案 0 :(得分:0)

也许尝试将其转换为整数,而不是使用utf8_encode

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

或者,除此之外:

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

你能给我们一个数据的例子吗?

编辑:Damien是对的,intval()不应该有所作为。

尝试回显内容,并确保它是字符串中的实际数字,以进行一些调试:

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

答案 1 :(得分: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

只需将列部分中的year替换为mysql列的名称即可。

答案 2 :(得分: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的更多信息。

答案 3 :(得分: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解析一些内容 - 确保检索到的所有数据都是 正如您所期望的那样,在将其插入数据库之前。

另外:尝试将类型更改为int(5),现在告诉我们....

您可以更轻松地查看您使用的查询(包含年份)和数据样本。

用于错误记录和显示使用:

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

玩得开心