我正在开发一个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,请原谅我这是一个非常基本的问题。
答案 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`");
美好而简单。