PHP MySQL对非对象上的成员函数setAttribute()的调用,只是不要';我不明白


PHP MySQL Call to a member function setAttribute() on a non-object, just don't get it

我的php页面有一个小问题,我就是不理解。

我有一个connect.php文件,我使用require("connect.php").将其包含在php页面的顶部

使用以下代码,我可以在表单中填充下拉菜单,而不会出现任何问题。

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT * FROM mytable"); 
$stmt->execute();
$rowsec = $stmt->fetchALL(PDO::FETCH_NUM);

当我提交页面时,所有字段的详细信息都会被捕获,并在数据库中进行输入,但我收到以下错误消息:

致命错误:在..第71行中的非对象上调用成员函数setAttribute()

第71行是$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION)

现在我发现,如果我添加以下行,它可以正常工作,没有任何错误:

$conn = new PDO("mysql:host=$servername;dbname=mydatabase", "user", "pass"); //This line here
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT * FROM mytable"); 
$stmt->execute();
$rowsec = $stmt->fetchALL(PDO::FETCH_NUM);

在我的require("connect.php")中,我有:

<?php
$servername = "localhost";
$username = "user";
$password = "pass";
try {
    $conn = new PDO("mysql:host=$servername;dbname=clincoding", $username, $password);
    echo "Connected successfully"; 
    }
catch(PDOException $e)
    {
    echo $e->getMessage();
    }
?>

为了从下拉菜单的表格中获取数据,我使用:

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT * FROM mytable"); 
$stmt->execute();
$rowsec = $stmt->fetchALL(PDO::FETCH_NUM);

对于我使用的下拉菜单:

<label for="dropmen">Select a section</label><br />
                <select name="dropmen" id="dropmen">
                    <?php foreach ($rowsec as $value) { ?>
                  <option value="<?php  echo $value[1] ?>"><?php  echo $value[2] ?></option>
                    <?php } ?>
                </select>

有人能告诉我为什么具有相同连接的require("connect.php")不起作用吗?试图让我了解PDO过程,这让我很困惑。

如有任何信息,我们将不胜感激。

干杯。

检查connect.php 的第7行

$conn = new PDO("mysql:host=$servername;dbname=clincoding", $username, $password);

并将其更改为

$conn = new PDO("mysql:host=".$servername.";dbname=clincoding", $username, $password);

从php.net中了解这个函数,并将其用作

<?php
/* Connect to an ODBC database using driver invocation */
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
?>