【问题标题】:Only variables should be passed by reference bind_param (PHP)只有变量应该通过引用传递 bind_param (PHP)
【发布时间】:2018-03-07 18:16:41
【问题描述】:

我正在尝试插入记录,但我的 bind_param 出现错误?我错过了什么吗?

for($i = 0; $i < count($getbookauthorfname); $i++){
    if($getbookauthorfname[$i] != "" && $getbookauthormname[$i] != "" && $getbookauthorlname[$i] != "" ){
        $query = "INSERT INTO tbl_author (book_isbn, author_firstname, author_middlename, author_lastname) VALUES (? , ? , ? , ?)";
        $stmt = $mysqlconnection->prepare($query);
        $getbookauthorfname[$i] = htmlspecialchars(strip_tags($getbookauthorfname[$i]));
        $getbookauthormname[$i] = htmlspecialchars(strip_tags($getbookauthormname[$i]));
        $getbookauthorlname[$i] = htmlspecialchars(strip_tags($getbookauthorlname[$i]));

        $stmt->bind_param("ssss", $getbookisbn, $getbookauthorfname[$i], $getbookauthormname[$i],   $getbookauthorlname[$i]);
        $stmt->execute();
    }
}

【问题讨论】:

  • $getbookauthorfname[$i] 不是变量。
  • 在我的 isset 中声明了 $getbookauthorfname = $_POST["author_fname"]; $getbookauthormname = $_POST["author_mname"]; $getbookauthorlname = $_POST["author_lname"];
  • 我可以给你看整个 php 代码,但是太长了
  • htmlspecialchars(strip_tags 为什么?您正在使用准备好的语句。
  • 认为 prepare() 应该在循环之外完成 - 准备一次并执行多次。

标签: php mysql mysqli prepared-statement


【解决方案1】:

正如错误所说,bind_param 只接受变量。你正在传递一个数组项,所以它不起作用。

试试这个:

//...
$fname = htmlspecialchars(strip_tags($getbookauthorfname[$i]));
$mname = htmlspecialchars(strip_tags($getbookauthormname[$i]));
$lname = htmlspecialchars(strip_tags($getbookauthorlname[$i]));

$stmt->bind_param("ssss", $getbookisbn, $fname, $mname, $lname);
//...

【讨论】:

  • 它有效,但我试图在一次提交中插入多个详细信息
【解决方案2】:

我设法回答了我自己的问题,我只是忘记将数组存储到我的文本框中,这就是我收到错误的原因。

<input type="text" class="form-control text-center" placeholder="First Name" id="author_fname[]" name="author_fname[]" required >

【讨论】:

    猜你喜欢
    • 2017-04-03
    • 1970-01-01
    • 2021-07-11
    • 2011-10-16
    • 1970-01-01
    相关资源
    最近更新 更多