PDO插入数据库不工作[重复]

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.