Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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();_Php_Mysql_Pdo - Fatal编程技术网

Php PDO-“;对非对象调用成员函数fetch();

Php PDO-“;对非对象调用成员函数fetch();,php,mysql,pdo,Php,Mysql,Pdo,我知道当查询返回false时通常会发生错误,但这次是毫无原因地发生的!(或者只是我犯了个大错误) 我在一个函数中使用了这些行,该函数以数组的形式返回支持票证信息,但正如我所说,当我试图获取票证信息时,会发生错误。我试图在获取行之前通过启用pdo调试模式和db->errorInfo()来检查mysql错误,但没有成功 这里会有什么问题 编辑: <?php error_reporting(E_ALL); ini_set('display_errors', 1); class TICKET_M

我知道当查询返回false时通常会发生错误,但这次是毫无原因地发生的!(或者只是我犯了个大错误)

我在一个函数中使用了这些行,该函数以数组的形式返回支持票证信息,但正如我所说,当我试图获取票证信息时,会发生错误。我试图在获取行之前通过启用pdo调试模式和
db->errorInfo()
来检查mysql错误,但没有成功

这里会有什么问题

编辑:

<?php
error_reporting(E_ALL); ini_set('display_errors', 1);

class TICKET_MANAGER
{
    function __construct($dbhost, $dbname, $dbuser, $dbpass) {
        try{
            $this->db = new PDO("mysql:host=$dbhost;dbname=$dbname;charset=utf8", $dbuser, $dbpass);
            $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }catch(PDOException $e){
            die('Connection failed: ' . $e->getMessage() );
        }
    }

    function viewTicket($ticket_safeid, $security_SenderId = false)
    {
        try{
            if(!$security_SenderId){
                $getbaseticketqry = $this->db->prepare("SELECT * FROM `tickets` WHERE `ticket_safeid` = ?");
                $getbaseticket = $getbaseticketqry->execute(array($ticket_safeid));
            }else{
                $getbaseticketqry = $this->db->prepare("SELECT * FROM `tickets` WHERE `ticket_safeid` = ? AND `ticket_sender` = ?");
                $getbaseticket = $getbaseticketqry->execute(array($ticket_safeid, $security_SenderId));
            }
        }catch(PDOException $e){
            die('Mysql error: ' . $e->getMessage() );
        }
        ...

    }

    ...
}

是你所有的
'?'
周围的引号-删除它们

阅读手册

从手册中:

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
异常应该告诉您这个错误

setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)
并在连接到数据库后立即使用


-

查询:

try {

// your query

}
    catch(PDOException $e){
     print  $e->getMessage();
    }

添加到文件的顶部,这将有助于查找错误

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

删除单引号无效。正如您所说,我在db连接之后尝试了setAttribute()方法,但也没有抛出任何错误。@ibrahimduran在打开PHP标记后立即在文件顶部添加错误报告,例如
@ibrahimduran Plus,以确保正确。您的连接实际上是PDO而不是mysqli,对吗?你也在使用一个类吗?更新您的问题,说明如何使用原始问题下的异常,以免覆盖原始代码。我没有将类用于数据库连接,我已经编辑了我的帖子,请查看。其他功能(newTicket等)也可以正常工作。我只对这个函数有问题。您如何使用
TICKET\u MANAGER
类?我已经为TICKET管理分离了文件(viewticket.php、newticket.php等)。我将该类文件包括在viewticket.php中,并创建了TICKET_MANAGER的一个新实例,然后我只使用viewticket()函数获取票据信息和回复。它从$POST获取票证\u安全ID,从会话获取senderId。我确信safeid和senderId正常工作。“会话中的senderId”-您是否使用会话本身?我将登录用户的id作为发件人id获取他自己的票证。你说se是什么意思?如果你在使用会话,这就是我的意思
try {

// your query

}
    catch(PDOException $e){
     print  $e->getMessage();
    }
<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code