2

PHP 5.3.2 の bind_param 関数に問題があります。

次のようなデータベーステーブル名「tbl_user」とデータがあるとします。

--------------------------------------------
ユーザー ID [整数] | ユーザー名 [varchar(15)]
--------------------------------------------
350 | ジョン・スミッチ
351 | ケリー・アン
--------------------------------------------

最初のコーディング:

$stmt = $mysqli->prepare("SELECT * FROM tbl_user WHERE user_id = ? ");
$stmt->bind_param('s', $v_user_id);
$v_user_id = '350a';
$stmt->execute();

システムは、「John Smitch」という名前の user_id が 350 である 1 つの結果を返します。

2 番目のコーディング:

$stmt = $mysqli->prepare("SELECT * FROM tbl_user WHERE user_id = ? ");
$stmt->bind_param('s', $v_user_id);
$v_user_id = 'a350';
$stmt->execute();

システムは空の結果を返します。

これまでのところ、PHP 5.3が値を文字列に自動キャストし、MySqlがphpからデータを受信すると、テーブル構造で定義された独自のデータ型に再び自動キャストすることを知っています。

では、値「350a」を渡したときにシステムが空の結果を返すように、この状況をどのように処理できますか?

4

1 に答える 1

1

ステートメントを実行する前に、値を検証する必要があります。それを検証する最も簡単な方法は、文字列が数値かどうかを確認することです。

$v_user_id = '350a';
if(is_numeric($v_user_id)) {
    $stmt = $mysqli->prepare("SELECT * FROM tbl_user WHERE user_id = ? ");
    $stmt->bind_param('s', $v_user_id);
    $stmt->execute();
}
于 2020-11-25T00:02:50.797 に答える