很新的PHP5,并有一些问题依然。我想通了如何使用准备语句现在试图插入选择/更新我的代码如下:

function input_lab_results($name, $image, $descrip) {
    $query = "INSERT INTO pat_table (pat_name, pat_image, pat_descrip, pat_doctor, pat_resident, pat_create, pat_modify) VALUES (?, ?, ?, ?, ?, ?, ?)";

    if($stmt = $this->conn->prepare($query)){
        $stmt->bind_param('sssiidd', $name, $image, $descrip, 0, 0, date("Ymd"), date("Ymd"));
        $stmt->execute();
        die();
    } else{
        die($this->conn->error);
    }
}

我正的误差是

  

致命错误:无法通过引用的HTML /类通过参数4 / mySQL.php在线43上

任何帮助/引用,将不胜感激。谢谢你。


大家都在用PDO提的是,做你们对此有什么好的教程或例子吗?

有帮助吗?

解决方案 2

我改成

function input_lab_results($name, $image, $descrip) {
    $query = "INSERT INTO pat_table (pat_name, pat_image, pat_descrip, pat_doctor, pat_resident, pat_create, pat_modify) VALUES (?, ?, ?, 0, 0, ?, ?)";

    if($stmt = $this->conn->prepare($query)){
        $stmt->bind_param('sssdd', $name, $image, $descrip, date("Ymd"), date("Ymd"));
        $stmt->execute();
        die();
    } else{
        die($this->conn->error);
    }
}

基本上我改变它被读??对于该查询中的整数0 I不结合它。

其他提示

它不是$descrip这就是问题;它是0(参数4和5)。解决的办法是通过变量,而不是整数:

 `$query = "INSERT INTO pat_table (pat_name, pat_image, pat_descrip, pat_doctor, pat_resident, pat_create, pat_modify) VALUES (?, ?, ?, ?, ?, ?, ?)";`

    $pat_doctor = 0;
    $pat_resident = 0;

    if($stmt = $this->conn->prepare($query)){
            $stmt->bind_param('sssiidd', $name, $image, $descrip, $pat_doctor, $pat_resident, date("Ymd"), date("Ymd"));`

显然mysqli_bind_param希望它的参数作为参考,所以它看起来对他们存储在内存中,而不是复制他们的价值在哪里。这是有道理的,因为一些你想绑定到SQL语句中的东西,如图像,可能是足够大,你宁可不要乱跑多余的副本。文本,字符串或以其他方式,不通过引用访问。见: http://us.php.net/references

我不建议硬编码的0到SQL语句,因为它混淆了不必要的代码。

让我提出PDO,顺便说一句。其语法是更加健壮。

不要使用bind_param - 这是一个非常直观和容易出错的接口,这是大部分来自底层的C-API的遗留。使用 bind_value 或更好的 - 值传递的数组作为参数到 PDOStatement->execute 。例如:

$query = "INSERT INTO pat_table (pat_name, pat_image, pat_descrip, pat_doctor, pat_resident, pat_create, pat_modify) VALUES (?, ?, ?, 0, 0, ?, ?)";
if ($stmt = $this->conn->prepare($query)) {
  $stmt->execute(array($name, $image, $descrip, date("Ymd"), date("Ymd")));
  die();
} else {
  die($this->conn->error);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top