$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();
我从the php manual获取了上述代码,我感到困惑的部分就在这里:
$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);
老实说,我不确定为什么手册提供的示例完全有效,因为您在声明它们之前使用该变量。
答案 0 :(得分:1)
bind_param
接受引用,如果您不确定引用的确切内容,请点击here获取名为“引用说明”的摘录
这确实意味着,在bind_param
之后设置变量是有效的,但是再一次,这取决于您希望如何做到这一点。我赞一个,更喜欢在绑定之前声明变量
小观察
变量在执行之前声明,并且PHP从上到下处理。当实际需要变量时(在执行时)它们已经被设置,如果你在execute()
之后声明你的变量,你会被提示SQL失败和其他不需要的php错误
答案 1 :(得分:0)
是的,因为mysqli_stmt::bind_param:Binds variables to a prepared statement as parameters
并且它使用对这些变量的引用,这样每当您更改它们时,更改都会反映出来。