insert to sql from php给出sqlstate[hy093]错误

kuuvgm7e  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(303)

我已经在这方面工作了一段时间,试图在我的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");

以下是错误消息:
致命错误:第45行的/home/ubuntu/workspace/hw7/insert.php中未捕获异常“pdoexception”,消息为“sqlstate[hy093]:无效参数号:未定义参数”
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

请帮忙。

mxg2im7a

mxg2im7a1#

:datefound 不是 :time . 您需要匹配指定的占位符( :datefound ),而不是列名( time ).
或者你可以用匿名的 ? 占位符并将值按正确顺序放入数组中。
例如

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

它们按发生的顺序结合,所以 ? 变成 $lcname .

vuv7lop3

vuv7lop32#

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

$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();

相关问题