从php插入到sql给SQLSTATE [HY093]错误

时间:2018-05-31 02:54:07

标签: php mysql pdo prepared-statement

我一直在研究这个问题,试图在我的sql中插入一个语句..但是我在网上查询后不断收到错误信息..请帮帮我:) 下面是我的代码 -

$sql = "INSERT INTO Pokedex(name, nickname, datefound) 
        VALUES (:name, :nickname, :time);";
$stmt = $db->prepare($sql);
$params = array(":name" => $lcname, 
                ":nickname" => $nickname, 
                ":datefound" => $time);
$stmt->execute($params);

并且错误消息似乎抱怨我的sql:

DROP TABLE IF EXISTS Pokedex;

CREATE TABLE Pokedex(
   name          VARCHAR(30)     PRIMARY KEY,
   nickname      VARCHAR(30),
   datefound     DATETIME      
);

INSERT INTO Pokedex(name,nickname,datefound) VALUES 
("Pikachu","Pika","2018-01-03 12:23:44");

以下是错误消息:

  

致命错误:未捕获的异常' PDOException'消息' SQLSTATE [HY093]:参数号无效:参数未定义'在第45行的/home/ubuntu/workspace/hw7/insert.php中

     

PDOException:SQLSTATE [HY093]:参数号无效:参数未在第45行的/home/ubuntu/workspace/hw7/insert.php中定义

Call Stack:
    0.0002     238144   1. {main}() /home/ubuntu/workspace/hw7/insert.php:0
    0.0098     249912   2. PDOStatement->execute() /home/ubuntu/workspace/hw7/insert.php:45

请帮忙。

2 个答案:

答案 0 :(得分:0)

:datefound不是:time。您需要匹配命名占位符(:datefound),而不是列名称(time)。

或者,您可以使用匿名?占位符,并按正确顺序将值放入数组中。

e.g。

$sql = "INSERT INTO Pokedex(name, nickname, datefound) 
        VALUES (?, ?, ?);";
$stmt = $db->prepare($sql);
$params = array($lcname, $nickname, $time);
$stmt->execute($params);

他们按照发生的顺序绑定,因此第一个?变为$lcname

答案 1 :(得分:0)

你需要绑定params。 请尝试以下代码:

 $sql = "INSERT INTO Pokedex(name, nickname, datefound) VALUES (:name, :nickname, :time);";
 $stmt = $db->prepare($sql);
 $stmt->bindParam(':name', $lcname);
 $stmt->bindParam(':nickname', $nickname);
 $stmt->bindParam(':time', $time);
 $lcname = "John Doe";
 $nickname = "john";
 $time = date('Y-m-d H:i:s');
 $stmt->execute();