2

我对 PHP 5.3.2 的 bind_param 函数有疑问。

假设我有一个数据库表名“tbl_user”和数据如下:

--------------------------------------
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();

系统将返回 1 个结果,其中 user_id 为 350,名称为“John Smitch”。

二次编码:

$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 回答