0

2つの列&をtest持つテーブル名を持つデータベースがあります。以下のコードで何が問題になっていますか? 配列をデータベースに追加できませんtableuseremail$u

<?php
    $con = mysql_connect("localhost","root","");
    if (!$con)
      {
      die('Could not connect: ' . mysql_error());
      }

    mysql_select_db("test", $con);

    $user = "safwan";
    $email = "esafw@jdjd.com";

    $u = array ( user => $user,
                    email => $email
                   );

    $q =   "INSERT INTO table  VALUES ($u)";

    mysql_query($q) OR die(mysql_error());

    mysql_close($con);
    ?> 
4

3 に答える 3

3

いくつかの問題があります。

  1. 配列をデータベースに直接挿入しようとしています。値に個別にアクセスする必要があります。

  2. 文字列が配列内のキーである場合を含め、文字列を引用符で囲む必要があります

  3. SQL インジェクションについて学ぶ必要がある

  4. mysql_* 関数は間もなく廃止されるため、これらの関数からの移行を検討する必要があります。

  5. table は MySQL キーワードであり、実際にテーブル名である場合はバッククォートが必要です

    $user, 'email' => $email ); $q = "INSERT INTO table (user, email) VALUES ('".mysql_real_escape_string($u['user'])."', '".mysql_real_escape_string($u['email'])."')"; mysql_query($q) OR die(mysql_error()); mysql_close($con); ?>

または:

<?php
    $con = mysql_connect("localhost","root","");
    if (!$con)
      {
      die('Could not connect: ' . mysql_error());
      }

    mysql_select_db("test", $con);

    $user = "safwan";
    $email = "esafw@jdjd.com";

    $q =   "INSERT INTO table (user, email) VALUES ('".mysql_real_escape_string($user)."', '".mysql_real_escape_string($email)."')";

    mysql_query($q) OR die(mysql_error());

    mysql_close($con);
    ?>         
于 2012-05-23T13:48:00.953 に答える
1

MySQL のデータ型を見てください。http://dev.mysql.com/doc/refman/5.5/en/data-types.html

配列をループして、要素を個別に追加する必要があります。また、セキュリティのために MySQLi や PDO などを使用することをお勧めしますhttp://php.net/manual/en/book.pdo.php

実際、PDO を使用すると、「配列を追加」することができます (設計方法のため)。

$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name=? AND password=?);
$stmt->execute(array($_GET['username'], $_GET['password']));

新しいテクノロジの 1 つを実際に学習する必要があるため、あまり詳しく説明するつもりはありません。準備されたステートメントと SQL インジェクションなどにより、はるかに安全です。

于 2012-05-23T13:47:45.410 に答える
0

クエリをエコーし​​てみてください。次のように表示されます。

"INSERT INTO table  VALUES (array)".

確かに、あなたが望まないもの。

配列をループするか、次を直接使用して、挿入クエリを作成できます。

INSERT INTO table  VALUES ($user, $email)
于 2012-05-23T13:48:18.480 に答える