范围和MySQLi绑定

时间:2012-07-24 13:52:52

标签: php mysqli

我已经使用旧的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收集价值时,我应该绑定/取消绑定吗?

2 个答案:

答案 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只是将值放在准备好的语句中,而不是一致地声明某些变量与语句“绑定”。