bind_param()在mysqli中究竟做了什么?

Kru*_*hah 1 php mysql mysqli prepared-statement bindparam

我正在使用PHP和mysqli理解预处理语句.我试着阅读一些教程,手册和这个:PHP中的Bind_Param,但是.但没有找到任何令人满意的anser.

有人在回答中写道:

__CODE__.

我在教程中找到了一些像这样的代码:

$stmt = $con->prepare("INSERT INTO user_accounts VALUES (?,?,?,?)");

$stmt->bind_param('xyz', $sample1, $sample2, $sample3, $sample4);   // bind to the parameter
Run Code Online (Sandbox Code Playgroud)

我明白我们写'?' 而不是我们的变量,以便以后可以给出实际值.和mysql为查询执行准备一个计划,而不是变量作为参数给出.

但是,请告诉我这段代码是什么意思?

bind_param('xyz', $sample1, $sample2, $sample3, $sample4);  
Run Code Online (Sandbox Code Playgroud)

四个变量以'xyz'作为参数给出......参数'xyz'到底在做什么?有必要写,以后会用吗?我没有发现它在其他地方使用过.

有人能解释一下吗?请帮助.

编辑:

我只想回答这个问题.如果你能解释一下,那么请帮忙:

在此输入图像描述

dec*_*eze 14

我想你理解绑定参数的概念,所以我不打算这样做.尽管如此,您可能需要查看此内容以获取更多背景信息.

用于绑定参数的mysqli API可能不是很优雅.它看起来像这样:

bool mysqli_stmt::bind_param ( string $types , mixed &$var1 [, mixed &$... ] )
Run Code Online (Sandbox Code Playgroud)

这意味着该函数的第一个参数$types,为mysqli提供了参数的类型 /应该将它们视为什么类型的信息.以下是各个参数.

$types参数是个别字符的字符串,每个字符表示一个类型.有四种类型:i,d,sb,这代表整数,,字符串二进制.因此,如果您想按顺序绑定两个整数和一个字符串,则$type参数必须为iis.然后按实际值跟踪:

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

$stmt->bind_param('iis', $int1, $int2, $str);
Run Code Online (Sandbox Code Playgroud)


Orm*_*moz 6

第一个参数指定列数据的类型。例如,如果我们有四列,并且所有列都是字符串类型,则可以这样写:

$stmt->bind_param('ssss', $sample1, $sample2, $sample3, $sample4);
Run Code Online (Sandbox Code Playgroud)

如果一列是整数类型,则使用i而不是s。例如,如果第三列是整数,则编写:

$stmt->bind_param('ssis', $sample1, $sample2, $sample3, $sample4);
Run Code Online (Sandbox Code Playgroud)

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

对于bind_param()函数的第一个参数,我们使用s字符串类型,i代表整数,代表db精度类型,代表Blob。

因此,对于您的情况,sssd意味着第四列是双栏,其余是字符串

  • @userX 根据 [PHP 手册](http://php.net/manual/en/mysqli-stmt.bind-param.php) `b` 代表 blob:对应的变量是一个 blob,会分包发送 (2认同)