вставка в sql из php выдает ошибку SQLSTATE [HY093] - PullRequest
0 голосов
/ 31 мая 2018

Я немного поработал над этим, пытаясь вставить заявление в свой 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]: недопустимый номер параметра: параметр не был определен »в /home/ubuntu/workspace/hw7/insert.php в строке 45

PDOException: SQLSTATE [HY093]: недопустимый номер параметра: параметр не былопределено в /home/ubuntu/workspace/hw7/insert.php в строке 45

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 голосов
/ 31 мая 2018

Вы должны связать параметры.Пожалуйста, попробуйте следующий код:

 $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();
0 голосов
/ 31 мая 2018

: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.

...