Php 在执行PDO::exec()时对非对象调用成员函数exec()

Php 在执行PDO::exec()时对非对象调用成员函数exec(),php,pdo,Php,Pdo,我正在编写一个PHP脚本,将一些数据库行从一个数据库导出/导入到另一个数据库 到目前为止,我使用了这个函数来确保目标表在放入新行之前是空的: function truncateTable($conn, $tblname) { echo "Truncating.."; $query = $conn->exec("TRUNCATE TABLE $tblname") or die("failed!"); echo "Truncated table $tblname!";

我正在编写一个PHP脚本,将一些数据库行从一个数据库导出/导入到另一个数据库

到目前为止,我使用了这个函数来确保目标表在放入新行之前是空的:

function truncateTable($conn, $tblname)
{
    echo "Truncating..";
    $query = $conn->exec("TRUNCATE TABLE $tblname") or die("failed!");
    echo "Truncated table $tblname!";
}
但是,这给了我一个错误:

Call to a member function exec() on a non-object
传递给$conn中函数的connectionstring如下所示:

$con2 = new PDO("mysql:host=$dbs2;dbname=$dbd2",$dbu2,$dbp2);
truncateTable($con2, "users");
我这样调用函数:

$con2 = new PDO("mysql:host=$dbs2;dbname=$dbd2",$dbu2,$dbp2);
truncateTable($con2, "users");
我做错了什么


我只是在学习PDO,如果这是一个非常基本的问题,请原谅。

函数中的参数是$conn,而不是$q。

函数中的参数是$conn,而不是$q。

试试这个,你是在向方法传递$conn,而不是$q:


要解决另一个问题,请使用query而不是exec:

尝试此操作,您将$conn传递给方法,而不是$q:


要解决另一个问题,请使用query而不是exec:

一个可能的罪魁祸首可能是DB权限,即MySQL用户配置文件是否有足够的权限截断表?从直觉上看,这似乎与删除相同,但事实并非如此。TRUNCATE需要删除权限


mysqli_查询中一个令人沮丧的事情是,如果不允许web用户删除表,那么…或死亡部分不会执行某种被动攻击,依我看

一个可能的罪魁祸首可能是DB权限,即MySQL用户配置文件是否有足够的权限截断表?从直觉上看,这似乎与删除相同,但事实并非如此。TRUNCATE需要删除权限

mysqli_查询中一个令人沮丧的事情是,如果不允许web用户删除表,那么…或死亡部分不会执行某种被动攻击,依我看

这对我很有用:

$clean2 = $db->query( "TRUNCATE TABLE `table`");
又好又简单。

这对我来说很有用:

$clean2 = $db->query( "TRUNCATE TABLE `table`");

漂亮而简单。

试试$conn->exec。。。相反,请尝试$conn->exec。。。相反,正确。然而,这并不能解决我的问题。现在它只是打印失败@FrederikNielsen连接的用户是否具有删除权限?如果我通过phpMyAdmin执行TRUNCATEIt,则它是必需的,因此查询不应该是wrong@FrederikNielsen而且,不是失败!;,您可以使用类似dieprint\r$conn->errorInfo,1;谢谢你最后的提示!对的然而,这并不能解决我的问题。现在它只是打印失败@FrederikNielsen连接的用户是否具有删除权限?如果我通过phpMyAdmin执行TRUNCATEIt,则它是必需的,因此查询不应该是wrong@FrederikNielsen而且,不是失败!;,您可以使用类似dieprint\r$conn->errorInfo,1;谢谢你最后的提示!正确-这是一个令人沮丧的问题。然而,现在我却失败了有没有办法看到更多的错误信息?正确-这是一个令人沮丧的问题。然而,现在我却失败了有没有办法查看更多错误信息?