一般错误:25个绑定或列索引超出范围

Err*_*Err 9 sqlite pdo

使用SQLite和PDO.我对PDO很新,所以我可以在这里使用一些帮助.我收到错误:

SQLSTATE[HY000]: General error: 25 bind or column index out of range
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

// db.php
function dbh($sql, $db = "", $nsx = "") {
    $db = ($db) ? $db : "mydb";
    $db = $db.".sqlite";
    try {
        $dbh = new PDO("sqlite:$db");
        $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
        // id, title, desc, cost, album, version, added
        $dbh->exec("CREATE TABLE IF NOT EXISTS `products` (
                        `id` INTEGER PRIMARY KEY,
                        `title` TEXT,
                        `desc` TEXT,
                        `cost` TEXT,
                        `album` TEXT,
                        `version`TEXT,
                        `added` DATETIME
                    )");
        //$mem = new PDO('sqlite::memory');
        //$mem->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

        $res = $dbh->prepare($sql);
        //var_dump($nsx);
        $res->execute($nsx);

        if (!is_array($nsx)) {
            return $res->fetchAll();
        }
    }
    catch(PDOException $e) {
        return $e->getMessage();
    }
}

// products.php
$sql = "INSERT INTO `products` (title, desc, cost, album, version, added) VALUES (:title,:desc,:album,:version,:cost,:date)";
$nsx = array(
':title'   => $i['addon']['title'][$k],
':desc'    => $i['addon']['desc'][$k],
':cost'    => $i['addon']['cost'][$k],
':album'   => $album,
':version' => '1.0',
':added'   => $date,
);
$dbh = dbh($sql,"",$nsx);
Run Code Online (Sandbox Code Playgroud)

Gho*_*ler 17

你绑定:added,但没有在VALUES列表中指定它:(:title,:desc,:album,:version,:cost,:date).而是指定:date哪个不受数组约束.

  • 如果您使用“UPDATE”语句收到上述错误,则其原因与此答案所描述的相同 (2认同)
  • 如果您的查询在绑定值周围使用引号(绑定值将为您处理引号),您也可能会看到此错误。删除引号,查询应该可以正常运行。 (2认同)