1

我正在编写一个 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字符串如下所示:

$con2 = new PDO("mysql:host=$dbs2;dbname=$dbd2",$dbu2,$dbp2);

我这样调用函数:

truncateTable($con2, "users");

我究竟做错了什么?

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

4

4 回答 4

4

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

function truncateTable($conn, $tblname)
{
    echo "Truncating..";
    $query = $conn->exec("TRUNCATE TABLE $tblname") or die("failed!");
    echo "Truncated table $tblname!";
}

要解决其他问题,请使用query()而不是exec():)

于 2013-01-15T19:53:30.380 回答
3

一个可能的罪魁祸首可能是数据库权限——即 MySQL 用户配置文件是否有足够的权限来截断表?直观上看,这似乎与 DELETE 相同,但事实并非如此。TRUNCATE 需要 DROP 权限(http://dev.mysql.com/doc/refman/5.1/en/truncate-table.html)。

关于 mysqli_query() 的一件令人沮丧的事情是,如果不允许 Web 用户 DROP 表,则“...或 die()”部分不会执行 - 一种被动攻击型,IMO。;~)

于 2014-08-14T20:57:27.910 回答
2

函数中的参数是$conn,不是$q.

于 2013-01-15T19:52:32.070 回答
-1

这对我有用:

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

很好很简单。

于 2016-05-16T01:48:41.830 回答