gpt4 book ai didi

php - 使用可重用数据库连接器时出现问题

转载 作者:行者123 更新时间:2023-11-29 22:13:26 30 4
gpt4 key购买 nike

我是 php 新手。我在通过 PHP 连接和使用数据时遇到问题。我对这个问题没有太多信息,也许我使用了一些过时的方法,或者我做错了什么。我仔细检查并在该网站上查找信息,但没有找到太多信息。下面是代码。

错误内容为:

Fatal error: Call to a member function query() on boolean in C:\xampp\htdocs\website\Practice\mysqli\pdo.php on line 6

这意味着附近有问题

$result = $conn->query($sql)or die(mysqli_error());

我正确输入了用户名和密码。为了确保安全,我什至创建了一个新的用户名和密码。我不知道为什么 $conn 不起作用,我希望有任何关于这个问题的想法或想法!

连接.ini.php

function dbConnect($usertype, $connectiontype = 'pdo') {
$host = 'localhost';
$db = 'student';
if ($usertype == 'read') {
$user = 'user';
$pwd = 'pass';
}

elseif ($usertype == 'write') {
$user = 'root';
$pwd = 'password';
}
else {
exit('Unrecognized connection type');
}
//Connection Code
if ($connectionType ='mysqli') {
return new mysqli($host, $user, $pwd, $db) or die ('Cannot open database');
}
else {

try {
return new PDO('mysql:host=$host;dbname=$db, $user, $pwd');
}
catch(PDOExecption $e) {
echo 'Cannot connect to database';
exit;
}
}
}
?>

mysqli.php

?php
require_once('connection.inc.php');
$conn = dbConnect('read', 'pdo');
$sql = 'SELECT * FROM guestbook';

$result = $conn->query($sql)or die(mysqli_error());
$numRows = $result->num_rows;
?>
<!DOCTYPE html>
<html>
<p> A total of <?php
echo $numRows;
?>
records were found.</p>
</html>

最佳答案

任何时候你得到...

"Fatal error: Call to a member function bind_param() on boolean"

...可能是因为您的查询存在问题。 prepare()可能会返回FALSE ( bool 值),但是这个通用的失败消息不会给您留下太多线索。您如何找出您的查询出了什么问题?你!

首先,确保错误报告已打开且可见:在打开 <?php 后立即将这两行添加到文件顶部标签:

error_reporting(E_ALL);
ini_set('display_errors', 1);

如果您的错误报告已在 php.ini 中设置,您就不必担心这一点。只需确保妥善处理错误,并且永远不要向用户透露任何问题的真正原因。对于那些想要损害您的网站和服务器的人来说,向公众揭露真正的原因可能是一个金刻的邀请。如果您不想向浏览器发送错误,您可以随时监控您的网络服务器错误日志。日志位置因服务器而异,例如,在 Ubuntu 上,错误日志通常位于 /var/log/apache2/error.log 。如果您正在 Linux 环境中检查错误日志,可以使用 tail -f /path/to/log在控制台窗口中查看实时发生的错误...或您创建的错误。

一旦您确定了标准错误报告,在数据库连接和查询上添加错误检查将为您提供有关正在发生的问题的更多详细信息。看一下这个示例,其中列名称不正确。首先,返回通用 fatal error 消息的代码:

$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
$query = $mysqli->prepare($sql)); // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();

该错误是一般性的,对您解决正在发生的问题没有太大帮助。

通过几行代码,您可以获得非常详细的信息,您可以使用这些信息立即解决问题。。检查prepare()声明的真实性,如果是好的,您可以继续绑定(bind)和执行。

$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
if($query = $mysqli->prepare($sql)) { // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();
// any additional code you need would go here.
} else {
$error = $mysqli->errno . ' ' . $mysqli->error;
echo $error; // 1054 Unknown column 'foo' in 'field list'
}

如果出现问题,您可以输出一条错误消息,直接引导您解决问题。在这种情况下,没有 foo表中的列,解决问题很简单。

如果您选择,您可以在函数或类中包含此检查,并通过如前所述优雅地处理错误来扩展它。

关于php - 使用可重用数据库连接器时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31412585/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com