簡體   English   中英

奇怪的PDO錯誤hy093

[英]Strange PDO error hy093

首先,請問我是否曾經問過類似的問題。 但是我沒有找到任何可以幫助我解決問題的東西。

進行中:在一個類中,我生成一個如下的SQL語句:

        $params = array();
$query = 'INSERT INTO '.TABLE_SETTINGS.' SET type=:type,';
        $params[] = array('type' => $setting['type']);

        if(!isset($setting['attributes'])){
            $query .= 'attributes=NULL,';   
        } else {
            $query .= 'attributes=:attributes,';
            $params[] = array('attributes' => $setting['attributes']);
        }

        if(!isset($setting['partid'])){
            $query .= 'partid=NULL,';   
        } else {
            $query .= 'partid=:partid,';
            $params[] = array('partid' => (int)$setting['partid']);
        }

        if(!isset($setting['description'])){
            $query .= 'description=NULL,';  
        } else {
            $query .= 'description=:description,';
            $params[] = array('description' => addslashes($setting['description']));
        }


        $query .= 'host=:host,name=:name,';
        $params[] = array('host' => (int)$setting['host']);
        $params[] = array('name' => $setting['name']);

        if(!isset($setting['content'])){
            $query .= 'content=NULL,';  
        } else {
            $query .= 'content=:content,';
            $params[] = array('content' => addslashes($setting['content']));
        }

        if(!isset($setting['trigger'])){
            $query .= 'trigger=NULL';   
        } else {
            $query .= 'trigger=:trigger';
            $params[] = array('trigger' => addslashes($setting['trigger']));
        }

之后,我將其傳遞給數據庫函數: dbQuery($ query,$ params)

函數dbQuery依賴於工作的PDO連接,如下所示:

function dbQuery($query,$params = array()){
global $DBVARS;  // I know that is not very nice ;-)
$db = dbInit();

$prefix = isset($DBVARS['table_prefix']) ? $DBVARS['table_prefix'] : '';
$sql = str_replace("{prefix}",$prefix,$query);

if(isset($params) && is_array($params) && count($params) > 0){
    $q = $db->prepare($sql);
    if(!$q->execute($params)){ // Added this just for debugging purpose
        $q = $q->errorCode();
    }
} else {
    $q = $db->query($sql);
}
$db->num_queries++;

return $q;

}

如果現在使用var_dump(dbQuery($ query,$ params)),它會向我返回HY093錯誤,告訴我我的參數與令牌不匹配,至少那是我通過google找到的。 為了清楚起見,我在這里顯示完整的生成的$ query:

INSERT INTO table_name SET type=:type,attributes=NULL,partid=NULL,description=:description,host=:host,name=:name,content=:content,trigger=NULL

這是數組$ params:

array(5) { [0]=> array(1) { ["type"]=> string(5) "yesno" } [1]=> array(1) { ["description"]=> string(79) "If yes, the link to the password score table is shown. It is hidden by default." } [2]=> array(1) { ["host"]=> int(49) } [3]=> array(1) { ["name"]=> string(17) "enable_scoretable" } [4]=> array(1) { ["content"]=> string(3) "yes" } }

我檢查了好幾次,但據我所知,元素的數量與數組的數量匹配,並且名稱也相等。 那么我哪里有錯誤?

我對php還是很陌生,英語不是我的直言,所以我希望我能很好地表達自己。

對此的任何幫助將不勝感激。 我已經搜尋了幾個小時,沒有任何可用的結果。 因此,我決定在這里發布我的第一個問題。

來自德國的問候,謝謝您的幫助。

這不是插入查詢的正確語法! 您對更新查詢感到困惑...

INSERT INTO table_name(第1欄,第2欄,第3欄...)值(第1值,第2欄,第3欄...)


編輯:

$params[] = array('type' => $setting['type']); // Wrong

它會創建一個數組數組。

$params = array_merge($params, array('type' => $setting['type'])); 

暫無
暫無

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

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