我正在建立一个网站,您可以在其中输入一些数据,然后将这些数据放入数据库中。
if (isset ($_POST['next_1']))
{
$name = $_POST['Name'];
$geburtsdatum = $_POST['Geburtsdatum'];
$anzahlom = $_POST['AnzahlOM'];
$conn = [];
}
else
{
header('Location: pdo_test.php', true, 302);
}
?>
$ conn是我的变量,用于保存连接数据。
<?php
//Showing Errors
error_reporting(E_ALL);
ini_set('display_errors', 1);
//Connection to Database
include 'includes/connect.php';
try
{
$conn->beginTransaction();
$stmt = $conn->prepare("INSERT INTO mitarbeiter_test (name, geburtsdatum, Monitor)
VALUES (:name, :geburtsdatum, :Monitor)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':geburtsdatum', $geburtsdatum);
$stmt->bindParam(':Monitor', $anzahlom);
$stmt->execute();
$conn->commit();
echo "<br>New records created successfully";
}
catch(PDOException $e)
{
$conn->rollBack();
error_log("Database rollback; inserting data failed: ".$e->getMessage());
}
?>
这是发生错误的部分: $ conn-> beginTransaction();
这是connect.php:
<?php include_once 'login_data.php';
try
{
$conn = new PDO('mysql:host='.HOST.';dbname='.DATABASE.'', ''.USER.'', ''.PASSWORD.'', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
}
catch(PDOException $e)
{
echo "Connection failed: " . $e->getMessage();
}
?>
当我提交带有数据的表单时,我得到一条消息,即与数据库的连接已成功,并且出现了错误消息: '致命错误:未捕获的错误:在/var/www/sla-test/htdocs/test/db_test_in.php:49中的数组上调用成员函数beginTransaction():49堆栈跟踪:#0 {main}放在/ var / www中/sla-test/htdocs/test/db_test_in.php行49'
我已经看过其他有关调用成员函数问题的文章,但是其中大多数是关于“ ... on non-object”的,而我发现的一些关于“ ... on array”的文章并未确实可以帮助我理解问题。据我了解,$ conn变量必须是一个对象而不是数组,但是我不知道如何重写代码来实现这一点。
当我删除行$conn = []
时,我得到的错误是'... on null'而不是'... on array'。
答案 0 :(得分:0)
您将$conn
定义为数组,而不是PDO实例。由于beginTransaction
不是数组的方法,因此您会收到错误消息“在数组上调用成员函数beginTransaction()”。
尝试使用与上一个代码段相同的方式进行初始化:
$conn = new PDO(...);