У меня проблемы со вставкой данных в базу данных mysql с помощью pdo и php. Я много чего пробовал в Интернете, но, похоже, ничего не работает.
Вот что у меня самое близкое к работе:
Подключение к базе данных:
<?php
class Database
{
private static $dbName = 'gildeuitleen' ;
private static $dbHost = 'localhost' ;
private static $dbUsername = 'root';
private static $dbUserPassword = 'root';
private static $cont = null;
public function __construct() {
die('Init function is not allowed');
}
public static function connect()
{
if ( null == self::$cont )
{
try
{
//Connectie maken
self::$cont = new PDO( "mysql:host = ".self::$dbHost.";"."dbname = ".self::$dbName, self::$dbUsername, self::$dbUserPassword);
}
catch(PDOException $e)
{
die($e->getMessage());
}
}
return self::$cont;
}
public static function disconnect()
{
self::$cont = null;
}
}
?>
Форма:
<form method = "post" action = "add.php">
<input type = "text" name = "Barcode" placeholder = "Barcode" required><br>
<select name = "Product">
<option value = "laptop">Laptop</option>
<option value = "beamer">Beamer</option>
</select><br>
<select name = "Vestiging">
<option value = "venlo">Venlo</option>
<option value = "Venray">Venray</option>
<option value = "Roermond">Roermond</option>
<option value = "Weert">Weert</option>
</select> <br>
<input type = "text" name = "Datumuitgave" placeholder = "JJJJ-MM-DD" required><br>
<input type = "text" name = "Datumteruggave" placeholder = "JJJJ-MM-DD" required><br>
<input type = "text" name = "Persoonlijknummer" placeholder = "Persoonlijk nummer" required><br>
<input type = "submit" value = "Toevoegen">
</form>
Файл add.php:
<?php
include 'includes/database-inc.php';
$pdo = Database::connect();
try{
$query = "INSERT INTO leningen (Barcode, Product, Vestiging, Datum uitgave, Datum teruggave, Persoonlijk nummer huurder) VALUES (?, ?, ?, ?, ?, ?)";
$stmt = $pdo->prepare($query);
$stmt->execute();
header('Location: OverzichtProducten.php?succes');
exit();
}
catch(PDOException $exception){
die('ERROR: ' . $exception->getMessage());
}
?>
Кто-нибудь знает, что здесь происходит не так? Он отправляет меня обратно на страницу как обычно, но ничего не добавляет в базу данных.
вы подготовили запрос, но не загрузили все значения при выполнении
Вы забыли связать ценности.
Вы не должны умирать в конструкторе, и, как сказал B001, вы должны привязать значения к?. например. $ stmt-> execute (array ("val1, val2, val3, etc"));
roytuts.com/rest-api-crud-example-in-php-mysql/






это даст вам ваши "качки"
РЕДАКТИРОВАТЬ для проверки: запустите это как отдельный URL, игнорируйте форму и т. д.
НАПРИМЕР:
сохранить файл как bob.php
посетите http://myurl.com/bob.php, убедитесь, что включение includes/database-inc.php "доступно для поиска", а затем опубликуйте результат
<?php
include 'includes/database-inc.php';
$pdo = Database::connect();
try{
$query = "INSERT INTO leningen ";
$query += " (`Barcode`, `Product`, `Vestiging`, `Datum uitgave`, `Datum teruggave`, `Persoonlijk nummer huurder`) ";
$query += "VALUES (:barcode, :product, :vestiging, :datum_uitgave, :datum_teruggave, :persoonlijk_nummer)";
$stmt = $pdo->prepare($query);
$stmt->execute(array(
"barcode" => "Bob",
"product" => "Bob",
"vestiging" => "Bob",
"datum_uitgave" => "Bob",
"datum_teruggave" => "Bob",
"persoonlijk_nummer" => "Bob"
));
echo "Success";
}
catch(PDOException $exception){
die('ERROR: ' . $exception->getMessage());
}
catch (Exception $exception) {
die('General Error: '.$exception->getMessage());
}
?>
также создайте $cont static public и вызовите $ pdo-> cont-> prepare ();
К сожалению, результат тот же :(
тогда ваша проблема не в PDO, а есть другие проблемы. EG: может ли база данных подключаться с использованием этих учетных данных? Я бы избавился от перенаправления header/exit, он вызывает много беспорядка. см. сообщение об ошибке на экране. (Я отвлекся, но гораздо лучше использовать include в том месте, куда вы идете, но вам нужно спроектировать все решение вокруг этого).
Я добавил general exception в уловку, чтобы помочь вам
Сама база данных может подключаться, она корректно отображает данные на другой странице. Я не уверен, что он также подключается, чтобы добавить tho. Я все еще новичок во всем этом: p
где твой class Database ->prepare method()??
Где должен быть этот метод подготовки? Еще раз извините, у меня нет опыта работы с базами данных
self::$cont - объект PDO. В нем есть ->prepare() и ->execute(), объект Database, который вы называете $pdo, на самом деле не является PDO(), его контейнером, а PDO в $cont ... т.е. ссылка prepare() сама по себе не существует на этом уровне объекта, на который вы ссылаетесь, но $pdo->cont->prepare() делает (если вы сделаете это общедоступным)
Я пытаюсь сказать, что строка $pdo->prepare() является незаконной, если вы не создадите метод, который является вашим class Database, поэтому я подозреваю, что он не работает до его запуска, но поскольку вы ТОЛЬКО ЛОВАЕТЕ $PDOExceptions, а не ванильный $Exceptions, вы не можете увидеть ошибку! это исключение PHP, когда вы ссылаетесь на метод в классе, который не существует
<form method = "post" action = "add.php">
<input type = "text" name = "Barcode" placeholder = "Barcode" required><br>
<select name = "Product">
<option value = "laptop">Laptop</option>
<option value = "beamer">Beamer</option>
</select><br>
<select name = "Vestiging">
<option value = "venlo">Venlo</option>
<option value = "Venray">Venray</option>
<option value = "Roermond">Roermond</option>
<option value = "Weert">Weert</option>
</select> <br>
<input type = "text" name = "Datumuitgave" placeholder = "JJJJ-MM-DD" required><br>
<input type = "text" name = "Datumteruggave" placeholder = "JJJJ-MM-DD" required><br>
<input type = "text" name = "Persoonlijknummer" placeholder = "Persoonlijk nummer" required><br>
<input type = "submit" value = "Toevoegen">
</form>
The add.php file:
$Barcode= $_POST['Barcode'];
$Vestiging= $_POST['Vestiging'];
$Datumuitgave= $_POST['Datumuitgave'];
$Datumteruggave= $_POST['Datumteruggave'];
$Persoonlijknummer= $_POST['Persoonlijknummer'];
include 'includes/database-inc.php';
$pdo = Database::connect();
try{
$query = "INSERT INTO leningen (Barcode, Product, Vestiging, Datum uitgave, Datum teruggave, Persoonlijk nummer huurder) VALUES (:Barcode,Vestiging,:Datumuitgave,:Datumteruggave,:Persoonlijknummer)";
$stmt = $pdo->prepare($query);
$stmt->bindparam(":Barcode",$Barcode);
$stmt->bindparam(":Vestiging",$Vestiging);
$stmt->bindparam(":Datumuitgave",$Datumuitgave);
$stmt->bindparam(":Datumteruggave",$Datumteruggave);
$stmt->bindparam(":Persoonlijknummer",$Persoonlijknummer);
$stmt->execute();
header('Location: OverzichtProducten.php?succes');
exit();
}
catch(PDOException $exception){
die('ERROR: ' . $exception->getMessage());
}
?>
Как запрос должен знать, что такое
VALUES (?, ?, ?, ?, ?, ?)?