PDO插入数据库不工作[重复]
问题描述:
This question already has an answer here:
When I type in the information that will be inserted into the database I receive this error:
Fatal error: Call to a member function execute() on a non-object.
The problem occurs on line 14 This is my code so far.
$database_file = 'sqlite:inventory.sqlite';
$mysql = new PDO($database_file);
$new_name = $_POST['Name_Item'];
$new_amount = $_POST['Amount_Item'];
$new_detail = $_POST['Description'];
$query =$mysql->prepare("INSERT INTO Items (id, Name, Amount, Detail)
VALUES (''," . $new_name . "," . $new_amount . ",". $new_detail .")");
$query->execute();
echo "testing";
echo "<TABLE>";
echo "<tr>";
echo "<td>id</td>";
echo "<td>Name</td>";
echo "<td>Amount</td>";
echo "<td>Detail</td>";
echo"</tr>";
while ($row = $query->fetch()) {
//print_r($row);
echo "<tr>";
echo "<td>$row[id]</td>";
echo "<td>$row[Name]</td>";
}
</div>
答
The issue is probably that you need quotes around the name and detail values.
This is one way you could solve the problem:
$query =$mysql->prepare("INSERT INTO Items (Name, Amount, Detail)
VALUES (:name, :amount, :detail)");
$query->execute(['name' => $new_name, 'amount' => $new_amount, 'detail' => $new_detail]);
You could also encapsulate name and detail in quotes, but that is not a good approach because if they have quotes in them it breaks.
Also, in most cases, id is assigned by the database.