В простых терминах кто-то может объяснить, что я делаю неправильно здесь – я просто пытаюсь вставить в db с помощью prepare и bindParam, это вставляет 0 и Null во все поля.
$sql = $db->prepare("INSERT INTO db_fruit VALUES (id=? ,type=? ,colour=?)"); $sql->bindParam(1, $newId); $sql->bindParam(2, $type); $sql->bindParam(3, $colour); $sql->execute()
btw: этот метод работал для меня для UPDATE и т. д., но не в этом случае для INSERT
Ваш синтаксис неверен, попробуйте следующее:
$sql = $db->prepare("INSERT INTO db_fruit (id, type, colour) VALUES (? ,? ,?)"); $sql->bindParam(1, $newId); $sql->bindParam(2, $name); $sql->bindParam(3, $colour); $sql->execute();
Расширяясь в ответе АО, также действуют следующие правила:
$sql = $db->prepare("INSERT INTO db_fruit (id, type, colour) VALUES (? ,? ,?)"); $sql->execute(array($newId, $name, $color));
А также:
$sql = $db->prepare("INSERT INTO db_fruit (id, type, colour) VALUES (:id, :name, :color)"); $sql->execute(array('id' => $newId, 'name' => $name, 'color' => $color));
Возможно, это будет личное предпочтение, но я считаю, что этот синтаксис намного чище.
$sql = $db->prepare("INSERT INTO db_fruit (`id`, `type`, `colour`) VALUES (:id, :name, :colour)"); $sql->bindParam(':id', $newId, PDO::PARAM_INT); $sql->bindParam(':type', $type, PDO::PARAM_INT); $sql->bindParam(':colour', $colour, PDO::PARAM_STR); $sql->execute();