0

パラメータまたは値のバインドに問題があります。何が問題なのか誰か知っていますか? 私が変更した場合は?それが機能する領域へ:-$

$item = 'area';
$query = dbConnectionPDO::getConnect()->prepare( ' SELECT * FROM  ? ' );
$query->bindParam(1, $item, PDO::PARAM_STR);
$query->execute();

while($resultId = $query->fetch(PDO::FETCH_ASSOC)){
    ////
}

これは良い解決策ですか?できます!

$select = 'select * from ' . $item . ' left join ' . $TableName . ' ';

$query = dbConnectionPDO::getConnect()->prepare("$select ON :three = :four");
$query->bindValue(':three', $three, PDO::PARAM_STR);
$query->bindValue(':four', $four, PDO::PARAM_STR);
$query->execute();

while($resultId = $query->fetch(PDO::FETCH_ASSOC)){
    ////
}
4

3 に答える 3

2

パラメータではなく、テーブル名をバインドしようとしています。あなたが実際にそれをできるかどうかはわかりません。

bindParamは、テーブル名ではなく、疑問符ホルダーまたは名前付きパラメーターをバインドすることによって機能します。

$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < ? AND colour = ?');
$sth->bindParam(1, $calories, PDO::PARAM_INT);
$sth->bindParam(2, $colour, PDO::PARAM_STR, 12);
$sth->execute();

プレースホルダーの「置換」を調べているだけの場合は、sprintf を使用できますが、怪しいまたは愚かなこと (外部ソースからテーブル名を受け入れるなど) を行う場合は、漏れる可能性があるため注意してください。

例えば:

$theQ = "SELECT * FROM `%s` LEFT JOIN `%s` ON `%s` = `%s`";
$runQ = sprintf($theQ, 'one', 'two', 'three', 'four');
于 2012-11-13T09:49:25.570 に答える
1

リテラルのみがパラメーター化されている有効な SQL ステートメントを提供する必要があります。データベース ドライバがクエリを受け入れるほど馬鹿げていたとしても、次のようなものを実行することになります。

SELECT * FROM 'area'

...これは明らかにあなたが意図したものではありません。

于 2012-11-13T09:51:24.167 に答える
0

パラメータのみで、テーブル名をパラメータ化することはできません。

于 2012-11-13T09:48:49.383 に答える