【问题标题】:MySQL Insert error with null valuesMySQL插入带有空值的错误
【发布时间】:2015-05-05 15:22:14
【问题描述】:

所以我试图从一个包含多个数组的数组中插入数据到 MySQL 表中,这些数组使用下面的代码保存表的每一行的数据:

if (is_array($tbl_data)){
$sql = "INSERT INTO teshsting (agent, event , data1,data2,data3,data4,data5) values ";  
$arrayValues = array();
foreach ($tbl_data as $row){

    $agent = mysql_real_escape_string($row[0]);
    $event = mysql_real_escape_string($row[1]);
    $data1 = mysql_real_escape_string($row[2]);
    $data2 = mysql_real_escape_string($row[3]);
    $data3 = mysql_real_escape_string($row[4]);
    $data4 = mysql_real_escape_string($row[5]);
    $data5 = mysql_real_escape_string($row[6]);

    $value = "($agent,$event,$data1,$data2,$data3,$data4,$data5)";
    array_push($arrayValues, $value);
}   
$sql .=implode(',', $arrayValues);

使用var_dum($sql) 进行快速检查会产生以下结果:

INSERT INTO teshsting (agent, event , data1,data2,data3,data4,data5) values (NONE,QUEUESTART,,,,,)/////

上面的Sql是无效的,因为这里有多个逗号:(NONE,QUEUESTART,,,,,)是由空字段生成的。如何在查询中插入单引号以使其有效?即正确的sql语法:

INSERT INTO teshsting (agent, event , data1,data2,data3,data4,data5) values (NONE,QUEUESTART,'','','','','')

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    要么:

    $data1 = "'" . mysql_real_escape_string($foo) . "'";
    

    或

    $value = "(...,'$data1',...)";
    

    只是不要尝试这两个选项,这会给您(...,''$data1'',...) 并因语法错误而终止查询。

    【讨论】:

    • 感谢这种修复,但我遇到了另一个我不确定的错误。为什么values (Local/120@disc-agents/n,ADDMEMBER,'','','','','')会导致sql语法错误?
    • local/120@disc-agents/n 在您看来是一个有效的字段名称吗?
    • 我正在插入字符串 local/120@disc-agents/n 它不是字段名称。
    • 然后在它周围加上引号。 insert ... values (Foo) 告诉数据库使用 Foo 字段中的任何值,这是没有意义的,因为首先没有现有记录可以从中获取该值。 insert ... values ('Foo') 只是一个包含字母 F、o、o 的字符串。
    猜你喜欢
    • 1970-01-01
    • 2015-01-27
    • 2013-06-06
    • 2014-05-05
    • 2011-07-16
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多