我已经使用旧的MySQL库PHP了很久了,我终于陷入了使用MySQLi的问题。准备好的陈述似乎非常有用,所以我试图把它们挂掉。
现在我正在创建一些预处理语句并在全局范围内绑定它们的参数,然后使用函数执行它们,如下所示:
$stmt = $mysqli->prepare("INSERT ...");
$stmt->bind_param("ss", $var1, $var2);
function process($t) {
global $mysqli, $stmt;
$var1 = $t['var1'];
$var2 = $t['var2'];
$stmt->execute();
}
我遇到的问题是执行函数遇到错误,其中变量仍为空。当我从$t
收集价值时,我应该绑定/取消绑定吗?
答案 0 :(得分:0)
我认为放置这样的代码应该有效: (假设$ t array()中的变量存在)
function process ($t) {
global $mysqli;
$var1 = $t['var1'];
$var2 = $t['var2'];
$stmt = $mysqli->prepare("INSERT ...");
$stmt->bind_param("ss", $var1, $var2);
$stmt->execute();
}
答案 1 :(得分:-1)
我是个假人:
$stmt = $mysqli->prepare("INSERT INTO table (col1, col2) VALUES(?, ?)");
function process($t) {
global $mysqli, $stmt;
$var1 = $t['var1'];
$var2 = $t['var2'];
$stmt->bind_param("ss", $var1, $var2);
$stmt->execute();
}
我认为MySQLi正在对变量做一些神奇的绑定。
在这种情况下,bind_param
只是将值放在准备好的语句中,而不是一致地声明某些变量与语句“绑定”。