我正在尝试使用PHP和mysqli了解准备好的语句。我尝试阅读一些教程,手册和本教程:Bind_Param in PHP,但尚未找到令人满意的答案。
有人回答为:
[准备SQL语句时,可以插入占位符(?)列值将到达的位置,然后使用bind_param()安全地用该占位符代替实际列的值。这样可以防止SQL注入的任何可能性。
我在这样的教程中找到了一些代码:
$stmt = $con->prepare("INSERT INTO user_accounts VALUES (?,?,?,?)");
$stmt->bind_param('xyz', $sample1, $sample2, $sample3, $sample4); // bind to the parameter
我知道我们写'?'而不是我们的变量,以便稍后可以提供实际值。 MySQL准备执行查询的计划,然后将变量作为参数给出。
这行代码是什么意思?
bind_param('xyz', $sample1, $sample2, $sample3, $sample4);
四个变量以'xyz'作为参数给出...参数'xyz'在这里到底是什么意思?有必要写,以后再用吗?我没有在其他地方使用它。
我只想要第一个参数的答案:
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS8xMjFPVi5wbmcifQ==” alt =“在此处输入图像描述”>
我认为您了解绑定参数的概念,因此我不再赘述。但是,您可能需要查看this以获取更多背景信息。
可以说,用于绑定参数的mysqli API并不是很好。看起来像这样:
bool mysqli_stmt::bind_param ( string $types , mixed &$var1 [, mixed &$... ] )
这意味着该函数的第一个参数$types
为mysqli提供信息types您的参数是什么/应该如何对待它们。接下来是各个参数。
$types
参数是一个由单个字符组成的字符串,每个字符都表示一种类型。有四种可能的类型:i
,d
,s
和b
,分别代表integer,double,string和binary。因此,如果要按此顺序绑定两个整数和一个字符串,则$type
参数需要为iis
。然后,按照实际值进行操作:
$int1 = 42;
$int2 = 11;
$str = 'foo';
$stmt->bind_param('iis', $int1, $int2, $str);
第一个参数指定列数据的类型。例如,如果我们有四列,且所有列均为字符串类型,则编写:
$stmt->bind_param('ssss', $sample1, $sample2, $sample3, $sample4);
[如果一列是整数类型,则使用i
而不是s
。例如,如果第三列是整数,则编写:]]
$stmt->bind_param('ssis', $sample1, $sample2, $sample3, $sample4);
指定第一和第二列是字符串(
s
),第三列是整数(i
),第四列是字符串(s
)。
对于bind_param()
函数的第一个参数,我们将s
用于字符串类型,i
代表整数,d
代表双精度类型,b
代表blob。
因此,对于您的情况,sssd
表示第四列为双精度,其余为字符串