0

私は次のPDOを持っています:

// Connect to PDO / $this->link = PDO
$this->statement = $this->link->prepare("
    SELECT p.*, pm.*
      FROM dev_permissions p, dev_permissions_menu pm
     WHERE pm.id = p.permission_menu_id
       AND pm.module = 'account'
       AND pm.controller IN('login', '*')
       AND pm.action IN('index', '*')
");
// Execute and verify number of rows

から1行を返し$this->statement->rowCount()ます。

ただし、パラメーターをバインドしようとすると、期待どおりに機能しません。

// Connect to PDO / $this->link = PDO
$this->statement = $this->link->prepare("
    SELECT p.*, pm.*
      FROM dev_permissions p, dev_permissions_menu pm
     WHERE pm.id = p.permission_menu_id
       AND pm.module = :module
       AND pm.controller IN(:controller, '*')
       AND pm.action IN(:action, '*')
",

$this->statement->bindParam(':module', 'account', PDO::PARAM_STR);
$this->statement->bindParam(':controller', 'login', PDO::PARAM_STR);
$this->statement->bindParam(':action', 'index', PDO::PARAM_STR);
// Execute and verify number of rows

ありがとう!

アップデート:

CTRL + C/CTRL + V の問題のため、正しいデータベース プレフィックスを反映するように変更PDO::FETCH_ASSOCされました。PDO::PARAM_STR#__

次のコードでテストしました:

$pdo = new \PDO('mysql:dbname=database;host=localhost', 'user', 'password');
$statement = $pdo->prepare("
    SELECT p.*, pm.*
      FROM dev_permissions p, dev_permissions_menu pm
     WHERE pm.id = p.permission_menu_id
       AND pm.module = :module
       AND pm.controller IN(:controller, '*')
       AND pm.action IN(:action, '*')
");
$statement->bindParam(':module', $request['module'], \PDO::PARAM_STR);
$statement->bindParam(':controller', $request['controller'], \PDO::PARAM_STR);
$statement->bindParam(':action', $request['action'], \PDO::PARAM_STR);
$statement->execute();

new \Core\Debug($statement->fetchAll());

そして、すべてが正しく動作します。私は他の方法で問題を見つけることができません..

4

1 に答える 1

1

あなたの例では変数名が少し混乱しています...prepareこれはPDOオブジェクトのメソッドであり、PDOStatementオブジェクトを返します...試してください:

$sth = $this->statement->prepare("
    SELECT p.*, pm.*
      FROM #__permissions p, #__permissions_menu pm
    WHERE pm.id = p.permission_menu_id
     AND pm.module = :module
     AND pm.controller IN(:controller, '*')
     AND pm.action IN(:action, '*')
",

$sth->bindParam(':module', 'account', PDO::PARAM_STR);
$sth->bindParam(':controller', 'login', PDO::PARAM_STR);
$sth->bindParam(':action', 'index', PDO::PARAM_STR);

//execute the prepared statement
$sth->execute();

注として... rowCountselectステートメントではクエリを発行しません... COUNT(*)selectと同じ情報でクエリを実行します... http://www.php.net/の例#2を参照してくださいmanual/en/pdostatement.rowcount.php

于 2012-06-10T01:36:32.007 に答える