1

実行したいものに適切なフォーマットを取得するために、数日間努力してきました。

目標は、以前に作成されたMYSQLテーブルに行を挿入することです。テーブルは文字列と整数が混在している可能性があります。ご存知のとおり、MYSQLでは挿入に文字列を引用符で囲む必要がありますが、整数には必要ありません。したがって、整数と2つの文字列のテーブルに何かを挿入する適切な方法は次のようになります。

insert into table values(number, "string", "string");

値をphp変数にしたいと思います。ただし、変数を入力すると、MYSQLをチェックインしたときにコードが結果を生成しなくなります。テーブルは作成されますが、空になります。したがって、機能しないのはこのステートメントである必要があります。

これは、それを挿入する関数の実際のコードです。

function insertRow($db, $new_table, $ID, $Partner, $Merchant)

    $insert = "INSERT INTO ".$new_table. " VALUES (1,'Partner','Merchant')";

    $q = mysqli_query($db, $insert);

これはこのように機能しますが、テーブル全体を、私が選択した回数だけ、すべての行の1、パートナー、およびマーチャントで埋めます。

私もこのようないくつかのバリエーションを試しました

function insertRow($db, $new_table, $ID, $Partner, $Merchant)

    $insert = "INSERT INTO ".$new_table. " VALUES(" .$ID. "," ."'$Partner'". ","."'$Merchant'".")";

    $q = mysqli_query($db, $insert);

私もこれらを試しました:

PHP変数をMySQLに渡す

しかし、実際にテーブルを行に挿入するために機能したものはありません。

誰かがこれを行う別の方法を持っていますか?

4

4 に答える 4

1

デバッグを非常に簡単に開始し、そこから作業する必要があります。私が最初に推測するのは、関数に渡されるパラメーター値を適切に設定していないということです。

これを試して:

function insertRow($db, $new_table, $ID, $Partner, $Merchant) {
  $ID=1;
  $Partner = 'Partner';
  $Merchant = 'Merchant';
  $insert = "INSERT INTO $new_table " .
    " VALUES($ID,'$Partner','$Merchant')";
  $q = mysqli_query($db, $insert);
  if (!$q) die(mysqli_error($db));
}

それは動作しますか?その場合、問題はパラメータ値が適切に設定されていないことです。

そこにいくつかのエラー報告も追加したことに注意してください;-)

ただし、このようにSQLを作成することはお勧めできません。SQLインジェクションに対して広く開かれています。プリペアドステートメントの使用を検討する方がはるかに優れています。

  $prep = mysqli_prepare($db, "insert into " . $new_table . " values (?,?,?)");
  $prep->bind_param("iss", $ID, $Partner, $Merchant);
  $prep->execute();

詳細については、mysqli_prepareのPHPドキュメントを参照してください。

于 2012-06-25T16:09:19.953 に答える
0

INSERTクエリはかなり近いように見えます。あなたの問題はSQLステートメントを終了しないことから生じるかもしれないと私は信じています:

$insert = "INSERT INTO " . $new_table . 
   " VALUES(" . $ID . ", '$Partner', '$Merchant');";

SQLステートメントを閉じる余分なセミコロン(;)に注意してください。

于 2012-06-25T16:05:40.537 に答える
0

PHPには、変数を二重引用符で囲まれた文字列に入れることができる機能があります。クエリを実行してみてください。

function insertRow($db, $new_table, $ID, $Partner, $Merchant)
    $insert = "INSERT INTO $new_table VALUES ($ID,'$Partner','$Merchant');";
    $q = mysqli_query($db, $insert);

これが機能する理由は、PHPが二重引用符で囲まれた文字列を解析して変数を置換するためです。

于 2012-06-25T16:17:03.150 に答える
0

PDOプリペアドステートメントを使用してみてください。それはパラメータを簡単にします:

function insertRow($db, $new_table, $ID, $Partner, $Merchant) {
   $host = 'host';
   $user = 'user';
   $password = 'password';
   $pdo = new PDO("mysql:host=$host;dbname=$db", $user, $password);
   $sql = "INSERT INTO $new_table VALUES (:id, :partner, :merchant)";
   $stmt = $pdo->prepare($sql);
   $stmt->bindValue(':id', $ID);
   $stmt->bindValue(':partner', $Partner);
   $stmt->bindValue(':merchant', $Merchant);
   $result = $stmt->execute() || die(var_dump($stmt->errorInfo()));
 }

ここでは、$ ID、$ Partner、および$ Merchantは自動的にエスケープされますが、SQLインジェクションを回避するために$new_tableをエスケープする必要がある場合があります。

于 2012-06-25T16:23:25.317 に答える