我一直在研究这个问题,试图在我的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
请帮忙。
答案 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();