簡體   English   中英

Phalcon:異常:參數數量錯誤

[英]Phalcon : Exception: Wrong number of parameters

我想執行一個准備好的插入:

<?php
function add_record($tab) {

        $champs= "";
        $value = "";
        $separateur ="";
        $ins = array();

        foreach ($tab as $k => $v){
            $champs .= $separateur . $k;
            $value .= $separateur . "?" ;
            $ins[] = $v;
            $separateur = ",";
        }
        $champs = '('.$champs.')';
        $value = '('.$value.')';

        $sSQL = "INSERT INTO facture $champs VALUES $value";

        executePreparedDML($sSQL, $ins);

    }

    function executePreparedDML($sSQL, $tab) {
    $config = array(
        "host" => SERVEUR,
        "dbname" => BDD,
        "port" => BDD_PORT,
        "username" => LOGIN_DB,
        "password" => PWS_DB);
    $connection = new \Phalcon\Db\Adapter\Pdo\Mysql($config);
    $statement = $connection->prepare($sSQL);
    $pdoResult = $connection->executePrepared($statement, $tab);
}
?>

執行 add_record function 時出現此錯誤:異常:參數數量錯誤? 那么有什么問題呢?

根據手冊

公共PDOStatement executePrepared(PDOStatement $ statement,數組$ placeholders,數組$ dataTypes)

執行准備好的語句綁定。 此函數使用從零開始的整數索引

在手冊的其他部分 ,我們可以看到Phalcon允許綁定名稱,例如。 = :email?0, ?1索引的= :email或綁定。

當您的函數正在提供[0 => 'first', 1 => 'second']數組時,我會測試創建類似(?0, ?1, ?2, ?3, ?4)(?0, ?1, ?2, ?3, ?4)而不是(?,?,?,?,?)

您也可以嘗試以問題示例中的方式進行准備,並直接從自己的答案中獲取版本。

另外,使用模型時,它很容易:

$obj = new credentialModel();
$isOk = $obj->save(array(
    'name' => 'John',
    'surname' => 'Doe'
));

一旦您使用了Phalcon,我建議您實際使用它。

我手動編寫了sql,但沒有動態編寫:

$tab["fact_date"] = convertDateFormat5($tab["fact_date"]);

        $config = array(
        "host" => SERVEUR,
        "dbname" => BDD,
        "port" => BDD_PORT,
        "username" => LOGIN_DB,
        "password" => PWS_DB);

        $connection = new \Phalcon\Db\Adapter\Pdo\Mysql($config);

        $sSQL = "insert into facture(user_code,clt_id,fact_ref,fact_lib,fact_date,fact_comm) values(?,?,?,?,?,?)";

        $statement = $connection->execute($sSQL, array($tab['user_code'], $tab['clt_id'], $tab['fact_ref'], $tab["fact_lib"], $tab['fact_date'], $tab["fact_comm"]));
        $id = $connection->lastInsertId();
        $connection->close();

        return $id;

通過這種方法,它可以工作,所以我不明白為什么動態編寫時不起作用!

只需 go 到app/config/router.php並將這行代碼$router->handle()替換為 $ router->handle($_SERVER['REQUEST_URI'])

它的處理方式有點復雜,但是考慮到代碼中的所有其他內容都很好,例如$tab值,等等。看到的錯誤是...

$sSQL = "INSERT INTO facture $champs VALUES $value"; 應該是$sSQL = "INSERT INTO facture " .$champs. " VALUES ". $value; $sSQL = "INSERT INTO facture " .$champs. " VALUES ". $value;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM