1

初めまして、以前にも同じような質問がありましたらすみません。しかし、私の問題を解決するのに役立つものは何も見つかりませんでした。

続き: クラスで、次のような 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 の初心者であり、英語は私の母国語ではないので、自分自身を十分に表現できれば幸いです。

これについての助けは大歓迎です。使用可能な結果が得られずに、何時間もグーグルで検索しました。そこで、最初の質問をここに投稿することにしました。

ドイツからのご挨拶、ご協力ありがとうございます。

4

1 に答える 1

1

挿入クエリの正しい構文ではありません! あなたは更新クエリと混同しています...

INSERT INTO table_name (列 1、列 2、列 3、...) 値 (値 1、値 2、値 3、...)


編集 :

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

配列の配列を作成します。

$params = array_merge($params, array('type' => $setting['type'])); 
于 2013-03-31T00:06:41.447 に答える