PDO插入数组

时间:2016-03-14 07:27:49

标签: php mysql arrays pdo

我最近一直试图将数组插入数据库,我不断收到错误消息“注意:数组转换为字符串”,我不确定如何解决这个问题,任何建议都将不胜感激

<?php 

try{
    $db = new PDO("mysql:host=localhost;dbname=test", 'root', '');
    $db ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}  catch(PDOException $e){
    echo $e->getMessage();
    die();
}


if ($_SERVER["REQUEST_METHOD"] == "POST"){


    $sort  = $_POST['sort'];
    $count = $_POST["count"];
    $error = $_POST["error"];

    $audit = array( ':sort' => $sort,
        ':count' => $count,
        ':error' => $error
    );


    foreach($audit as $completeAudit => $display) {
        //print_r($display);    

        $sql = implode("INSERT INTO `audits` (`sort`, `count`, `error`, `timeentered`) VALUES ('$sort','$count','$error', NOW())");
    }

    $query = $db->prepare($sql);

    $query->execute(array(
        ':sort' => $sort,
        ':count' => $count,
        ':error' => $error
    ));
}

修改

$db = new PDO("mysql:host=localhost;dbname=test", 'root', '');
$db ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    if ($_SERVER["REQUEST_METHOD"] == "POST"){
        $sql = "INSERT INTO `audits` (`sort`, `count`, `error`, `timeentered`) VALUES (?,?,?, NOW())";
        $stmt = $db->prepare($sql);
        $query->execute(array($_POST['sort'], $_POST["count"], $_POST["error"]));
    }

这就是它现在的样子,我删除了所有内容并使用了下面提供的代码

2 个答案:

答案 0 :(得分:1)

问题可能出在implode()电话上。它需要一个数组作为参数,但你传递一个字符串。

但是,你在循环内的每次迭代中都覆盖了$sql变量,所以我不确定它应该做什么。

最后,您的代码需要SQL inejctions,因此请查看使用prepared statements

答案 1 :(得分:0)

此错误与PDO无关 - 它只是基本的PHP语法。

但是,您的PDO也是错误的。这是正确的代码:

$db = new PDO("mysql:host=localhost;dbname=test", 'root', '');
$db ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

if ($_SERVER["REQUEST_METHOD"] == "POST"){
    $sql = "INSERT INTO `audits` (`sort`, `count`, `error`, `timeentered`) VALUES (?,?,?, NOW())");
    $stmt = $db->prepare($sql);
    $stmt->execute(array($_POST['sort'], $_POST["count"], $_POST["error"]));
}