Mysqli"准备语句"不是创建对象

Hri*_*ari 0 php mysql mysqli prepared-statement

我是一个但未使用Mysqli,我遇到以下代码的问题..

$mysql = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME) or die('There was a problem connecting to the database');
     if (mysqli_connect_errno()) {
        printf("DB error: %s", mysqli_connect_error());
        exit();
     }

     $query = "INSERT INTO employee(id, name, age, address, phone, email, department,
         designation, joindt, terminate, salary, deduction, tds, pf)
         VALUES (:id, :name, :age, :address, :phone, :email, :department,
         :designation, :joindt, :terminate, :salary, :deduction, :tds, :pf)";

     $ins = $mysql->prepare($query);
     if(!ins){
            echo "prepare failed\n";
      echo "error: ", $mysql->error, "\n";
      echo "OBJECT NOT CREATED";
      return;

     }
Run Code Online (Sandbox Code Playgroud)

运行此代码后,我在浏览器中收到以下错误:

(!)致命错误:未捕获异常'mysqli_sql_exception',并显示消息'您的SQL语法中有错误; 检查与MySQL服务器版本对应的手册,以便在第40行的C:\ wamp\www\payroll \new_backend.php附近使用正确的语法

(!)mysqli_sql_exception:SQL语法中有错误; 检查与您的MySQL服务器版本对应的手册,以便在'join,terminate,salary,deduction,tds,pf'附近使用正确的语法VALUES(:id,:name,:age,'在C:\ wamp的第2行)第40行\ www\payroll \new_backend.php

我猜PREPARE语句不是创建$ ins对象.有帮助吗?

Pek*_*ica 5

join是mySQL中的保留字.你需要将它包含在反引号中:

`join` 
Run Code Online (Sandbox Code Playgroud)

或 - 更好 - 更改列的名称.

此外,看起来mysqli不支持PDO样式的:fieldname绑定.查看prepare()手册中的示例.

我现在无法测试这个,但正确的语法应该是这样的(缩写):

$id = 10;
$name = "John Doe";

$query = "INSERT INTO employee(id, name) values (?, ?)";
$query->bind_param("i", $id);
$query->bind_param("s", $name);
Run Code Online (Sandbox Code Playgroud)