【问题标题】:How could a query fail to insert data into mysql that is retrieved from WEB?查询如何无法将数据插入从 WEB 检索的 mysql 中?
【发布时间】:2010-11-23 22:30:34
【问题描述】:

我需要向 mysql 中插入一些数据。我不确定在将它们插入数据库字段之前是否需要检查输入或格式化/剥离它们,因为从 web 返回的结果可能包含 mysql 不接受的字符(我认为)。我无法将推文插入 mysql 表。字段的类型是 varchar。这是 php 脚本中的插入语句:

$json = $_POST['msg_top'];
      $msg = json_decode($json);
           foreach($msg->entry as $status)
               {
                 $t = $status->content;
                 $query = "INSERT INTO msg2(id,msg,msg_id,depth) VALUES ('','$t','ID','3')";
                 mysql_query($query);
                 if(!mysql_query($query, $dbh))
                 {die('error:' .mysql_error());} 
              }

【问题讨论】:

  • 你得到什么错误?这在哪里失败?这需要基本的调试
  • 如何进行基本调试?对我来说测试它的问题是,当它从 js 脚本通过 post 获取数据时,我检查数据库中的值是否插入。但我不知道如何检查错误是否发生数据未发布或此文件中的任何问题。因为没有数据如果我只是运行它来检查它是否有问题。
  • 好吧,即使它来自 AJAX 请求,您仍然可以返回任何您喜欢的字符串并在 Firefox 的 Firebug 扩展的 console 中查看它们。

标签: mysql json insert


【解决方案1】:

是的,在 SQL 命令中使用它们之前escape 所有值非常重要。

$json = $_POST['msg_top'];
$msg = json_decode($json);
foreach($msg->entry as $status) {
    $t = mysql_real_escape_string($status->content);
    $query = "INSERT INTO msg2(id,msg,msg_id,depth) VALUES ('','$t','ID','3')";
    mysql_query($query);
    if( !mysql_query($query, $dbh) ) {
        die('error:' .mysql_error());
    }
}

此外,您的查询可能存在其他问题:

  1. 如果 id 字段为 auto_increment'ing,则字段或值列表中不需要它。
  2. 我可能遗漏了一些东西,但是为什么您在 msg_id 字段中使用字符串“ID”?

至于帮助解决此问题,我建议将所有 $query 字符串附加到日志文件以供以后检查。然后,如果问题不是很明显,您可以手动尝试在数据库上运行命令(即:可能通过 PhpMyAdmin)并从那里检查任何错误代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-07
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2016-07-01
    • 2014-06-29
    • 1970-01-01
    相关资源
    最近更新 更多