Fatal error: Call to a member function setFetchMode() on a non-object[Normal]
Fatal error: Call to a member function setFetchMode() on a non-object[Normal]
我的 AJAX 调用的 php 脚本出现以下错误。致命错误:调用非对象上的成员函数 setFetchMode()。实际上,我已经编写了一个存储过程来创建动态临时 table。请在下面找到用于调用存储过程的存储过程和 php 脚本。
`CREATE DEFINER=`root`@`localhost` PROCEDURE `StoreValue`(IN `Clname` VARCHAR(55), IN `ip_a` VARCHAR(55), IN `port_n` INT, IN `table_1` VARCHAR(55), IN `variable1` VARCHAR(55), IN `moddate1` TIMESTAMP, IN `moddate2` TIMESTAMP)
BEGIN
DECLARE table_name VARCHAR(55);
SET @table_name := table_1;
set @sql_text:=concat('create temporary table ',@table_name,'(status varchar(100),moddate datetime,INDEX mod_index (moddate)) '," SELECT `status`,`moddate` FROM `globstats_graph` WHERE Cname=? and ip=? and port=? and Variable=? and status REGEXP '^[0-9]+$|^ON$' and moddate between ? and ?");
PREPARE stmt FROM @sql_text;
set @a=Clname;
set @b=ip_a;
set @c=port_n;
set @d=variable1;
set @e=moddate1;
set @f=moddate2;
EXECUTE stmt USING @a,@b,@c,@d,@e,@f;
END`
php代码:
用于连接
try {
$conn = new PDO("mysql:host=$hostname;dbname=$database",$username, $password);
}
catch (PDOException $pe) {
die("Error occurred:" . $pe->getMessage());
}
用于调用存储过程
try {
// execute the stored procedure
$sql = "CALL StoreValue('$client','$ip','$port','$table_name','$var','$new_start','$new_end')";
$q = $conn->query($sql);
$q->setFetchMode(PDO::FETCH_ASSOC);
$total_search=$q->rowCount();
} catch (PDOException $pe) {
echo die("Error occurred:" . $pe->getMessage());
}
请帮我解决这个问题...
您的 $q 变量不是对象,这会导致致命错误。很可能是 $conn->query() 方法调用返回了有问题的值,您需要深入挖掘才能找出 query()
方法失败的原因。
开始搜索的最佳起点之一是 PDO 文档,以了解它对错误报告有何支持。特别是,考虑到您将查询代码包装到 try/catch 块中这一事实,我认为您会发现此用户评论非常有趣:http://php.net/manual/en/pdo.query.php#74943.
The handling of errors by this function is controlled by the attribute PDO::ATTR_ERRMODE.
Use the following to make it throw an exception:
<?php
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>
我的 AJAX 调用的 php 脚本出现以下错误。致命错误:调用非对象上的成员函数 setFetchMode()。实际上,我已经编写了一个存储过程来创建动态临时 table。请在下面找到用于调用存储过程的存储过程和 php 脚本。
`CREATE DEFINER=`root`@`localhost` PROCEDURE `StoreValue`(IN `Clname` VARCHAR(55), IN `ip_a` VARCHAR(55), IN `port_n` INT, IN `table_1` VARCHAR(55), IN `variable1` VARCHAR(55), IN `moddate1` TIMESTAMP, IN `moddate2` TIMESTAMP)
BEGIN
DECLARE table_name VARCHAR(55);
SET @table_name := table_1;
set @sql_text:=concat('create temporary table ',@table_name,'(status varchar(100),moddate datetime,INDEX mod_index (moddate)) '," SELECT `status`,`moddate` FROM `globstats_graph` WHERE Cname=? and ip=? and port=? and Variable=? and status REGEXP '^[0-9]+$|^ON$' and moddate between ? and ?");
PREPARE stmt FROM @sql_text;
set @a=Clname;
set @b=ip_a;
set @c=port_n;
set @d=variable1;
set @e=moddate1;
set @f=moddate2;
EXECUTE stmt USING @a,@b,@c,@d,@e,@f;
END`
php代码: 用于连接
try {
$conn = new PDO("mysql:host=$hostname;dbname=$database",$username, $password);
}
catch (PDOException $pe) {
die("Error occurred:" . $pe->getMessage());
}
用于调用存储过程
try {
// execute the stored procedure
$sql = "CALL StoreValue('$client','$ip','$port','$table_name','$var','$new_start','$new_end')";
$q = $conn->query($sql);
$q->setFetchMode(PDO::FETCH_ASSOC);
$total_search=$q->rowCount();
} catch (PDOException $pe) {
echo die("Error occurred:" . $pe->getMessage());
}
请帮我解决这个问题...
您的 $q 变量不是对象,这会导致致命错误。很可能是 $conn->query() 方法调用返回了有问题的值,您需要深入挖掘才能找出 query()
方法失败的原因。
开始搜索的最佳起点之一是 PDO 文档,以了解它对错误报告有何支持。特别是,考虑到您将查询代码包装到 try/catch 块中这一事实,我认为您会发现此用户评论非常有趣:http://php.net/manual/en/pdo.query.php#74943.
The handling of errors by this function is controlled by the attribute PDO::ATTR_ERRMODE.
Use the following to make it throw an exception:
<?php $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); ?>