截断表不起作用

时间:2013-01-15 19:50:48

标签: php mysql pdo truncate

我正在开发一个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");

我做错了什么?

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

4 个答案:

答案 0 :(得分:5)

请尝试相反,您将$conn传递给方法,而不是$q

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

要解决其他问题,请使用query()代替exec():)

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

关于mysqli_query()的一个令人沮丧的事情是,如果不允许Web用户使用DROP表,那么" ...或者die()"部分没有执行 - 一种被动攻击的IMO。 ;〜)

答案 3 :(得分:0)

这对我有用:

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

美好而简单。