bind_param()在mysqli中到底做了什么?

问题描述 投票:0回答:2

我正在尝试使用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 =“在此处输入图像描述”>

php mysql mysqli prepared-statement bindparam
2个回答
13
投票

我认为您了解绑定参数的概念,因此我不再赘述。但是,您可能需要查看this以获取更多背景信息。

可以说,用于绑定参数的mysqli API并不是很好。看起来像这样:

bool mysqli_stmt::bind_param ( string $types , mixed &$var1 [, mixed &$... ] )

这意味着该函数的第一个参数$types为mysqli提供信息types您的参数是什么/应该如何对待它们。接下来是各个参数。

$types参数是一个由单个字符组成的字符串,每个字符都表示一种类型。有四种可能的类型:idsb,分别代表integerdoublestringbinary。因此,如果要按此顺序绑定两个整数和一个字符串,则$type参数需要为iis。然后,按照实际值进行操作:

$int1 = 42;
$int2 = 11;
$str  = 'foo';

$stmt->bind_param('iis', $int1, $int2, $str);

5
投票

xyz指定列数据的类型。例如,如果我们有四列,并且所有列均为字符串类型,则编写:

$stmt->bind_param('ssss', $sample1, $sample2, $sample3, $sample4);

如果一列是integer类型,我们将使用i而不是s。例如,如果第三列是integer,则我们写:

$stmt->bind_param('ssis', $sample1, $sample2, $sample3, $sample4);

指定第一和第二列为字符串(s),第三列为integeri),第四列为字符串(s)。

对于bind_parameter函数的第一个参数,对于字符串类型,我们使用si代表integerd代表double类型,b代表blob

因此,根据您的情况,sssd表示第四列为double,其余为string

© www.soinside.com 2019 - 2024. All rights reserved.