3

たとえば、準備した政治家の名前付きプレースホルダーでは、次のことができます。

<?php
$stmt = $db->prepare("SELECT * FROM table WHERE id=:id AND name=:name");
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->bindValue(':name', $name, PDO::PARAM_STR);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

withは、" "または" " PHP関数を使用して、またはそれ以外の方法で実際に整数であるかどうか->bindValuePDO::PARAM_INT確認します。また、設定セットで期待されているものでない場合、失敗してクラッシュしますか?$idis_intis_numeric$id->bindValuePDO::PARAM_INT

私はPDOMySQLを初めて使用しますが、次のことも考えています。

$stmt->bindValue(':name', $name, PDO::PARAM_STR);

で説明されている場合のエンコーディングの問題を修正します$name。トリミングとストライピングのタグも自動的に処理できますか?

4

1 に答える 1

2

PDO::PARAM_INT を使用した ->bindValue は、$id が実際に整数であるかどうかを確認します。

チェックされません。変数を PARAM_INT としてバインドすると、PHP は単純に(int)"123"最初に整数にキャストします。エラーは発生せず、数値以外の文字列は単純にゼロにキャストされます。文字列から数値への変換に関する PHP マニュアルも参照してください。

... PDO::PARAM_STR);
$name で説明されている場合、エンコーディングの問題を修正します。トリミングやストライピング タグも自動的に処理できますか?

文字列型のパラメーターの場合、渡された値の自動トリミングや変換は行われません。

入力文字セットがデータベースの文字セットと異なる場合、エンコードは PDO ドライバーまたは受信データベース サーバーのいずれかによって調整されます。しかし、それだけです。

于 2012-10-14T00:23:38.860 に答える