在非对象MySQLiDB上调用成员函数fetch_field()

时间:2013-09-02 05:48:58

标签: mysql mysqli

我无法在此类中使用INSERT UPDATE函数:MySQLiDB。 我尝试将数据写入mysql,如果存在,则此数据需要更新。所以我使用INSERT ... ON DUPLICATE KEY UPDATE...。我的代码是这样的:

$db->rawQuery("INSERT INTO table1 (field1,field2,field3) VALUES (?,?,?) ON DUPLICATE KEY UPDATE field2=VALUES(field2),field3=VALUES(field3)", array("value1",value2,value2));

此代码工作正常。但是当在循环中使用此代码并通过另一个数组给出值时,会显示此错误:Call to a member function fetch_field() on a non-object in...。这是循环中的代码:

$db->rawQuery("INSERT INTO table1 (field1,field2,field3) VALUES (?,?,?) ON DUPLICATE KEY UPDATE field2=VALUES(field2),field3=VALUES(field3)", array($value[$i][value1],$value[$i][value2],$value[$i][value3]));

在这种情况下我能做些什么?

1 个答案:

答案 0 :(得分:0)

不要使用MySQLiDB。它在很多方面都无法使用。

您可以改为使用safemysql

$sql = "INSERT INTO table1 (field1,field2,field3) VALUES (?s,?s,?s) 
        ON DUPLICATE KEY UPDATE field2=VALUES(field2),field3=VALUES(field3)";
$db->query($sql, $value[$i]['value1'],$value[$i]['value2'],$value[$i]['value3']);

或者,以更简单的方式:

foreach ($value as $row)
{
    $sql = "INSERT INTO table1 SET ?u
            ON DUPLICATE KEY UPDATE field2=VALUES(field2),field3=VALUES(field3)";
    $db->query($sql, $row);
}

(仅当$value来自可信来源)

您还可以为单个插入

创建查询
$ins = array();
foreach ($value as $row) {
    $ins[] = $db->parse("(?s,?s,?s)",$row['value1'],$row['value2'],$row['value3']);
}
$instr = implode(",",$ins);
$sql = "INSERT INTO table1 (field1,field2,field3) VALUES ?p 
        ON DUPLICATE KEY UPDATE field2=VALUES(field2),field3=VALUES(field3)";
$db->query($sql, $ins);