これはtrueを返しますが、それはテーブルを切り捨てませんでした:MySQLでプリペアドステートメントを使用してテーブルを切り詰めるには?
$this->db->query("TRUNCATE TABLE $tablename");
しかし、それは、プリペアドステートメントのためのデータベース接続オブジェクトを作成する前に動作します。
修正方法?また、準備されたステートメントを使用してテーブルを切り詰める方法も知りたい。
これはtrueを返しますが、それはテーブルを切り捨てませんでした:MySQLでプリペアドステートメントを使用してテーブルを切り詰めるには?
$this->db->query("TRUNCATE TABLE $tablename");
しかし、それは、プリペアドステートメントのためのデータベース接続オブジェクトを作成する前に動作します。
修正方法?また、準備されたステートメントを使用してテーブルを切り詰める方法も知りたい。
いいえ、準備された文は、テーブル名をバインドすることができないため解決策にはなりません。 したがって、Truncate Tableに対してprepared statementを使用しないでください。
SQLのリテラルはバインドできません。データは1つです。したがって、キーワード、演算子、および任意の識別子は、プリペアドステートメントを使用してバインドすることはできません。データはバインドのみできます。
PDOプリペアドステートメントは、ユーザー入力をサニタイズするためにバインドされたパラメータなどの機能を使用できるように、ユーザー入力でクエリを実行する場合に便利です。
私の提案では、truncate tableにprepared statementを使用しないでください。
あなたが本当にコードを使用し、使用しているOpencartの場合は、準備された使用して切り捨てる場合:
$sql = sprintf('TRUNCATE TABLE %s%s', DB_PREFIX, $table);
$this->db->query($sql);
一度これを試してみて、私はあなたができる、TRUNCATE TABLE
について
をお知らせまだPDO::prepare
とPDOStatement::execute
の両方を使用します。
$tablename = 'tblName';
$PDOStatement = $PDO->prepare("TRUNCATE TABLE $tablename;");
$PDOStatement->execute();
、名前付きを使用することはできません(:name
)または疑問符(?
)パラメータマーカー。ただし、TRUNCATE
に関しては、通常、準備されたステートメントが意図されているクエリほど頻繁に使用しません。
http://stackoverflow.com/questions/11312737/can-i-parameterize-the-table-name-in-a-prepared-statement – Sean
を参照してください。なぜ、デフォルトのdbクエリの実行が「$ this-> db-> query "これは動作しませんでしたか?しかし、それはtrueを返しますが、テーブルには影響しません!! – Karan
私の答えを更新しました。一度お試しください – Deep