2
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
$stmt->bind_param('sssd', $code, $language, $official, $percent);

$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 11.2;

/* execute prepared statement */
$stmt->execute();

我从php 手册中获取了上面的代码,我感到困惑的部分在这里:

$stmt->bind_param('sssd', $code, $language, $official, $percent);

$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 11.2;

通过首先声明变量然后将它们传递给 bind_param() 来使用此代码是否有效且等效?

像这样:

$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 11.2;

$stmt->bind_param('sssd', $code, $language, $official, $percent);

老实说,我不确定为什么手册给出的示例完全有效,因为您在声明它们之前使用了变量。

4

2 回答 2

1

bind_param接受参考,如果您不确定究竟是什么参考,请单击此处获取名为“参考解释”的摘录

这确实意味着,在之后设置变量是有效的,bind_param但话又说回来,这取决于您希望如何做。一方面,我更喜欢在绑定之前声明变量

很少观察

变量是在执行之前声明的,并且随着 PHP 从上到下处理。当实际需要变量时(在执行时)它们已经被设置了,如果你在之后声明你的变量,execute()你将被提示 SQL 失败和其他不需要的 php 错误

于 2013-09-03T13:49:03.407 回答
0

是的,因为mysqli_stmt::bind_param :Binds variables to a prepared statement as parameters它使用对这些变量的引用,因此无论何时更改它们,更改都会反映在它们身上。

于 2013-09-03T13:37:32.513 回答