1

あるDBから別のDBにいくつかのデータベース行をエクスポート/インポートする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

考えられる原因の1つは、DB権限である可能性があります。つまり、MySQLユーザープロファイルには、テーブルを切り捨てるのに十分な権限がありますか?直感的にはDELETEと同じように見えるかもしれませんが、そうではありません。TRUNCATEにはDROP権限が必要です(http://dev.mysql.com/doc/refman/5.1/en/truncate-table.html)。

mysqli_query()のイライラする点の1つは、WebユーザーがテーブルのDROPを許可されていない場合、「... ordie()」の部分が実行されないことです。これは一種の受動的攻撃的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 に答える