1

私はPHPPDOを初めて使用し、通常のMySQLクエリをPDOで動作するように変換しています。

phpMyAdminでテストした場合の以下のクエリは、割り当てられた値がSQLステートメントの現在のプレースホルダーを置き換えたときにうまく機能します。しかし、現在PDOで機能するように構成すると、結果やエラーは発生しません。誰かが私に教えてくれますか、私が間違っているのは何ですか?

配列内の参照としてパラメーターを渡すことができないと誰かが私に言いました。

そして、正しければ、ソリューションを作成し、変数に渡されたユーザーIDのみを使用するための最良の方法は何ですか$uid。ありがとう。

<p>// For testing</p>
<pre>$uid = 1;</pre>
<p>&nbsp;</p>   
<pre>$array = array(
    ':uId' => ''.$uid.'',
    ':aId' => 'u.user_id',
    ':gID' => 'a.group_id',
    ':eID' => 'a.entry_id',
    ':pID' => 'a.permit_id'
    );</pre>

 

//qd_user_usamテーブルのSQLを作成します

$ sql = "SELECT u.user_id、a.acl_id、g.group_name、e.entry_level、p.permit_level
FROM qd_users as u、qd_users_acl as a、qd_users_group as g、qd_users_entry as e、qd_users_permission as p
WHERE u.user_id =:uID
            AND a.acl_id =:aID
            AND g.group_id =:gID
            AND e.entry_id =:eID
            AND p.permit_id =:pID ";

<p>try
{</p>
   <p>// Build the database PDOStatement</p>
   <pre>$_stmt = $this->_dbConn->prepare($sql);</pre>
   <pre>$_stmt->execute($array);</pre>
<pre>}
catch(PDOException $e)
{</pre>
    <pre>$this->_errorMessage .= 'Error processing user login access. <br /> Line #'.__LINE__ .' '.$e ;</pre>  
    <pre>die($this->_errorMessage);
}</pre>

<pre>$results = $_stmt->fetchAll(PDO::FETCH_ASSOC);</pre>
<pre>return $results;</pre>

<pre>$results = null;</pre>
<pre>$this->_dbConn = null;</pre>
4

2 に答える 2

1

あなたは準備されたステートメントを間違って受け取ります。
クエリ内の値を表すのではなく、動的に追加されたデータのみを表すために使用する必要があります。

Whilea.group_idは列名であり、準備済みステートメントなしでそのまま記述する必要があります。

// For testing
$uid = 1;

// create the sql for qd_user_usam table
$sql = "SELECT u.user_id, a.acl_id, g.group_name, e.entry_level, p.permit_level 
        FROM qd_users as u, qd_users_acl as a, qd_users_group as 
             g, qd_users_entry as e, qd_users_permission as p 
        WHERE u.user_id = ?
        AND a.acl_id    = u.user_id
        AND g.group_id  = a.group_id
        AND e.entry_id  = a.entry_id
        AND p.permit_id = a.permit_id";
$_stmt = $this->_dbConn->prepare($sql);
$_stmt->execute(array($uid));
于 2013-02-12T18:28:21.203 に答える
1

JOIN問題は、結合された列をパラメーターとしてバインドすることによって暗黙的に sを書き込もうとしていることです。これは機能しません。パラメータは別の列を参照できません。この場合、それらは文字列と見なされます。このようにクエリを書き直すと、JOIN問題が解決するはずです。

SELECT u.user_id, a.acl_id, g.group_name, e.entry_level, p.permit_level 
    FROM qd_users AS u
        JOIN qd_users_acl AS a ON (u.user_id = a.acl_id)
        JOIN qd_users_group AS g ON (g.group_id = a.group_id)
        JOIN qd_users_entry AS e ON (e.entry_id = a.entry_id)
        JOIN qd_users_permission AS p ON (p.permit_id = a.permit_id)
    WHERE u.user_id = :uID
于 2013-02-12T18:30:37.427 に答える