Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 让PDO::fetch(PDO::fetch_类)返回对象的空值实例,而不是bool(false)_Php_Oop_Pdo - Fatal编程技术网

Php 让PDO::fetch(PDO::fetch_类)返回对象的空值实例,而不是bool(false)

Php 让PDO::fetch(PDO::fetch_类)返回对象的空值实例,而不是bool(false),php,oop,pdo,Php,Oop,Pdo,我的用户通过web界面管理公司的客户。他们可以使用(除其他方式外)输入导航到客户机,以直接选择客户机id,该id将向他们显示客户机条目 为此,我使用PDO::FETCH_类映射php对象中的数据库值。然后使用这些对象生成html;所述html将作为客户端id显示在屏幕上 $oSTMT = $oDB->prepare("SELECT id,name FROM clients WHERE id=?"); $oSTMT->setFetchMode(PDO::FETCH_CLASS,'cli

我的用户通过web界面管理公司的客户。他们可以使用(除其他方式外)输入导航到客户机,以直接选择客户机id,该id将向他们显示客户机条目

为此,我使用PDO::FETCH_类映射php对象中的数据库值。然后使用这些对象生成html;所述html将作为客户端id显示在屏幕上

$oSTMT = $oDB->prepare("SELECT id,name FROM clients WHERE id=?");
$oSTMT->setFetchMode(PDO::FETCH_CLASS,'client');
$oSTMT->execute(array(12673));
$oClient = $oSTMT->fetch(); // returns false when no row is selected
$oClient->makeHTML(); // which resultd in Fatal error: Call to a member function on a non-object
在重新设计让一个对象包装所获取的对象以便它在布尔值时不会中断之前,我会尝试让PDO生成一个实例对象

我的问题有两个:在输入中输入一个不存在的客户机id和创建一个新客户机。在这两种情况下,客户机id均未引用数据库中的任何行
execute(数组([values])
将返回
bool(true)
(成功执行的语句),但是
->fetch(PDO::fetch_类,'client')
将返回
bool(false)

我的解决方案是创建一个id=0的客户机行,这样当它不存在时,我就用id=0进行查询以获得我的“默认”客户机行,但我想知道:

当语句未选择任何行时,是否有命令指示
PDO::FETCH_CLASS
生成所选对象的实例?


这还可以避免我必须首先验证id是否存在(我承认这不是很昂贵,但我不想非得这么做)

首先实例化类,然后使用
FETCH\u INTO
而不是
FETCH\u class

$client = new client();
$oSTMT = $oDB->prepare("SELECT id,name FROM clients WHERE id=?");
$oSTMT->setFetchMode(PDO::FETCH_INTO,$client);
$oSTMT->execute(array(12673));
$client = $oSTMT->fetch();
$client->makeHTML();

首先实例化类,然后使用
FETCH\u INTO
而不是
FETCH\u class

$client = new client();
$oSTMT = $oDB->prepare("SELECT id,name FROM clients WHERE id=?");
$oSTMT->setFetchMode(PDO::FETCH_INTO,$client);
$oSTMT->execute(array(12673));
$client = $oSTMT->fetch();
$client->makeHTML();

您可以先手动创建类实例,然后使用
FETCH\u进入
模式,而不是
FETCH\u类
。这样,即使结果为false,该类仍然存在,默认值如类中所述。听起来不错,您可以先手动创建类实例,然后在中使用
FETCH\u进入
模式而不是
FETCH\u CLASS
。这样,即使结果为false,该类仍将存在,并具有类中所述的默认值。听起来不错