gpt4 book ai didi

php - 为什么我的 PDO 总是出现 bool 错误?

转载 作者:行者123 更新时间:2023-11-29 17:20:21 24 4
gpt4 key购买 nike

我有一个 mySQL 类来连接数据库并在数据库中执行查询。当我连接到数据库时,一切正常。当我尝试将某些内容放入数据库时​​,它也可以,但是当我尝试从中获取某些内容时,无论输入如何,我都会收到 bool (true)错误。我假设它必须返回一个对象,但它返回一个 bool 值。为什么会这样?

我的代码如下所示:

class Database {

function __construct() {
// пустой инициализатор

$this->set_connection(); // нужно ли автоматически инициализировать?
}

private $dbchar = "UTF8";
private $dbuser = "admin";
private $dbpass = "1234";
private $dbhost = "localhost";
private $dbname = "core_db";
private $dbpref = "pre_";

private $link;

private function set_connection() {

$dsn = "mysql:host=".$this->dbhost.";dbname=".$this->dbname.";charset=".$this->dbchar;

$opt = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
//PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
// Выключает режим эмуляции! если у вас проблемы с LIMIT ?,?
PDO::ATTR_EMULATE_PREPARES => TRUE
);
try {
$this->link = new PDO($dsn, $this->dbuser, $this->dbpass, $opt);
if (!$this->link) throw new Exception("Cannot connect to database!", 4);

} catch (Exception $e) {
die("Error! " . $e->getMessage());
}
}

// Получаем ссылку на соединенние с базой

function get_connection() {

return $this->link;
}

/*
НЕ УДАЛЯТЬ ---------------------------------------------------------
Запросы можно использовать вот так.................!
# просто испольняет SQL запрос // INSERT. DELETE OR UPDATE
$this->execute_query($sql);
$this->execute_query($sql, $data);
# all rows
$result = $this->execute_query($sql, $data)->fetchAll();
foreach ($result as $row) echo $row['name'];
# one row
$row = $this->execute_query($sql, $data)->fetch();
# one cell
$count = $this->execute_query($sql)->fetchColumn(); // можно использовать для подсчета ячеекы
# column
$ids = $this->execute_query($sql)->fetchAll(PDO::FETCH_COLUMN);
НЕ УДАЛЯТЬ ---------------------------------------------------------
*/

// метод выполнения запроса SQL !!!
// Использ. $sql = SELECT * FROM table WHERE a = ? and b = ?
// Использ. $data = array('a', 'b');

function execute_query($sql, $elements=false) {

$error_exist = false;
$data = false;

try {
if (empty($sql)) throw new RuntimeException('no SQL!');

$stmt = $this->get_connection()->prepare($sql);

if (!$stmt) throw new RuntimeException('SQL preparing failure!');

if (!$elements) {
$data = $stmt->execute();
} else {
$data = $stmt->execute($elements);
}

if (!$data) throw new RuntimeException('SQL execution failure!');

} catch (Exception $e) {
$error_exist = true;
$data = $e->getMessage();
}

return array('error' => $error_exist, 'result' => $data);
}



// Закрываем соединение с базой
function close_connection() {
$this->link = null;
}

function __destructor() {
$this->close_connection();
}

}

index.php 文件本身显示在此处:

$sql = "SELECT * FROM prava WHERE test_id = ?";

$r = $db->execute_query($sql, ['1']);

var_dump($r);

最佳答案

最后解决这个问题:

那我做错了什么?我返回执行结果,但我需要返回一个对象,然后进行 fetch() Daaammnnn..

感谢@user3783243

所以这段代码:

   if (!$elements) {
$data = $stmt->execute();
} else {
$data = $stmt->execute($elements);
}

必须是这个代码:

   if (!$elements) {
$data = $stmt->execute();
return $data;
} else {
$stmt->execute($elements);
return $stmt // and then get a fetch from object
}

作为示例。

关于php - 为什么我的 PDO 总是出现 bool 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51286458/

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