【问题标题】:Error putting data into database将数据放入数据库时​​出错
【发布时间】:2014-03-02 14:07:21
【问题描述】:

我有以下 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);}}}

(代码有更多的if函数)

还有一个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

谢谢

【问题讨论】:

  • 您收到的 MySQL 错误是什么?
  • 没有显示错误,但是认为有一个是合乎逻辑的,因为没有添加信息
  • 观看我的答案编辑以发现错误...

标签: php mysql sql types


【解决方案1】:

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 列的名称即可。

【讨论】:

  • 问题是当我把“año”列和 $year 值,行没有添加...
  • 向我们展示该代码。看你的工作代码没有意义。给我们您的错误信息。
  • @Damien 也许这与año中的enye有关。
  • @Leng,是的,它可能会。不确定。
  • 我已将“año”更改为“ano”,但没有任何变化。
【解决方案2】:

也许尝试将其转换为整数而不是使用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 />';}}}

【讨论】:

  • 该信息是从 filmaffinity.com/es 电影页面中挑选的,例如 view-source:filmaffinity.com/es/film731232.html
  • @minato 这一切都很好,但将其回显以调试您在脚本中实际得到的内容。
【解决方案3】:

在向 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

【讨论】:

  • 我收到了这个错误link我不知道这是什么意思
【解决方案4】:

我认为您的问题在于您尝试插入的值类型和数据:

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)); 

玩得开心

【讨论】:

  • 这是我的 simple_html_dom.php link,这是我的 application.php(我在其中获取数据并进行查询)link 这是filmaffinity 的源代码link 希望这是您询问的信息
  • 添加这些行后,我收到了这个错误link我不知道这是什么意思
  • 不,这不是我们需要的 - 尝试将 echo htmlentities($year); 添加到您的 FOR 循环中,我怀疑您收到的数据不是年份值,或者它包含一些 html 实体(   &gr; 等) 不需要的 - 也是指向目标页面的链接(tou 解析可能会有所帮助)另一种方法是使用 inval($year) 并且 PHP 将尝试将字符串解析为其 int 值。
  • 此错误意味着您在尝试传递的值附近的查询语法中存在错误 - 我希望您“在插入之前转义所有值使用:$thevalue = mysqli_real_escape_string($con,$thevalue); 转义可能的特殊字符打断你的查询。
  • 对不起,问题是逗号被删除了...问题是“ñ”字符,已改为“n”,问题已解决,非常感谢跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
  • 2013-04-25
  • 2014-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多