0

誰でも私を助けることができます

これはうまくいきます::

            $stmt = $this->conn->prepare("SHOW TABLES FROM db LIKE 'xyz'"); //tablename hardcoded
            $stmt->execute();
            $rows = $stmt->fetch(PDO::FETCH_ASSOC);  //fetchAll
            

ただし、スクリプトで動的になるため、テーブル名をバインドしようとすると::

            $stmt = $this->conn->prepare("SHOW TABLES FROM db LIKE :tbl"); //tablename hardcoded
            $tbl = "xyz";
            $stmt->bindParam(":tbl", $tbl, PDO::PARAM_STR);
            

これによりエラーが発生し、

            $stmt = $this->conn->prepare("SHOW TABLES FROM cens LIKE ?");
            $tbl = "xyz";
            $stmt->bindParam(1, $tbl, PDO::PARAM_STR);

これもエラーになります。

エラーは

致命的なエラー: キャッチされない例外 'PDOException' とメッセージ 'SQLSTATE[42000]: 構文エラーまたはアクセス違反: 1064 SQL 構文にエラーがあります。「?」の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。/opt/lampp/htdocs/PDO/test.php:132 スタック トレースの 1 行目:

0 /opt/lampp/htdocs/PDO/test.php(132): PDO->prepare('SHOW TABLES FRO...')

クエリとバインド変数の両方で引用符を使用してみましたが、うまくいきませんでした

テーブル名をバインドしたいのですが、

4

1 に答える 1

1

次のことを試してください。

$string = 'xyz';
$somethingelse ="%".$string."%";
$sth =$dbh->prepare("select * from tablename WHERE something LIKE :somethingelse")
$sth->bindParam(":somethingelse",$somethingelse)

別の方法は次のとおりです。

$string = 'xyz';
$somethingelse ="%".$string."%";
$sth =$dbh->prepare("select * from tablename WHERE something LIKE CONCAT(:string, '%')")
$sth->bindParam(":string",$string)

これらの方法のいずれかが機能するはずです。

于 2015-05-18T10:46:53.647 に答える