0

私は 2 つの PHP/SQL 関数を持っています。3 つの挿入コマンドを 3 つではなく単一の $import として実行したいのですが、縮小する方法がわかりません。

$import9="INSERT into wp_postmeta (meta_id,post_id,meta_key,meta_value) values(',','$data[37]','lower_electric_costs','$data[5]')";
$import10="INSERT into wp_postmeta (meta_id,post_id,meta_key,meta_value) values(',','$data[37]','cheapest_green_electric','$data[6]')";
$import11="INSERT into wp_postmeta (meta_id,post_id,meta_key,meta_value) values(',','$data[37]','contract_type','$data[11]')";

PRINT の結果と同じことです。これをどのように縮小しますか?

mysql_query($import9) or die("mysql_error()");
print $import9."<br>";
mysql_query($import10) or die("mysql_error()");
print $import10."<br>";
mysql_query($import11) or die("mysql_error()");
print $import11."<br>";

私はまだPHP/SQLを学んでおり、コードを縮小する方法を学ぶことはその重要な部分だと思います. 誰かが縮小版がどのように見えるかの例を私に教えてくれれば、おそらくそこからそれを取ることができます.

ありがとう

4

1 に答える 1

3

次のように、1 つのクエリに組み合わせることができます。

$import9="
    INSERT into
        wp_postmeta
        (meta_id,post_id,meta_key,meta_value)
    values
        (',','$data[37]','lower_electric_costs','$data[5]'),
        (',','$data[37]','cheapest_green_electric','$data[6]'),
        (',','$data[37]','contract_type','$data[11]')
";

ただし、関数は非推奨であるため、関数mysqliの代わりに使用する必要があります。mysqlmysql

mysqli_query($import9);

mysqli_queryセキュリティ上の理由から、INSERT クエリを使用せずに、プリペアド ステートメントを使用することもお勧めします。PDOPrepared Statementsを確認してください。

まず、PDO インスタンスを作成します。

$db = new PDO("mysql:host=localhost;port=3306;dbname=mydb", "username", "password");
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); //Turn off prepared statement emulation too.

準備済みステートメントを使用するprepareと、サーバーでステートメントを実行できます。

$stmt = $db->prepare("
    INSERT into
        wp_postmeta
        (meta_id,post_id,meta_key,meta_value)
    values
        (?,?,?,?)
");

次のような配列を使用します。

$values = array(
    array(',',$data[37], 'lower_electric_costs', $data[5]),
    array(',',$data[37], 'cheapest_green_electric', $data[6]),
    array(',',$data[37], 'contract_type', $data[11]),
);

次に、一連の execute ステートメントを発行します。

foreach ($values as $v) {
    $stmt->execute($v);
}

最後に、ステートメントを閉じて、より多くのステートメントを実行できるようにします。

$stmt->closeCursor();
于 2013-01-23T20:36:10.377 に答える