2013-01-15 43 views
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 

ConnectionString中传递到$conn中的函数看起来像这样:

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

我打电话这样的功能:

truncateTable($con2, "users"); 

我在做什么错?

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

+0

请改用'$ conn-> exec(...)'。 – hafichuk

回答

5

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

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

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

+0

正确 - 那真是无赖。但是,现在我只是“失败!” - 以任何方式查看更多错误信息? –

+0

嗨,我已经更新了我的文章 - 它现在应该可以工作。 – user1909426

3

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

+0

正确。但这并不能解决我的问题。现在它只是打印“失败!” –

+0

@FrederikNielsen连接的用户是否拥有DROP权限?它是必需的TRUNCATE –

+0

它的工作原理,如果我通过phpMyAdmin - 所以查询不应该是错误的 –

1

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

有关mysqli_query()的一件令人沮丧的事情是,如果web用户不允许删除表,那么“...或die()”部分不会执行 - 这种被动攻击性的IMO。 ;〜)

0

这为我工作:

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

尼斯和简单。