0

今から 2 時間、テーブルに値を挿入しようとしています。エラーが発生せず、問題がわかりません。

挿入しようとしている値:

$query = "INSERT INTO banlist (banid, active, ip, by, date, reason) VALUES (NULL, 1, '10.25.47.88', 'AUTOBAN', '12-12-45', 'test')";
mysql_query($query);

完全に機能する値の例:

$query = "INSERT INTO accounts (username, password, email, regdate) VALUES ('test', 'test', 'test@test.test', 't-t-t t:t:t')";
mysql_query($query);

問題が見つかりません!何か不足していますか?両方のテーブルが存在します。

4

6 に答える 6

7

問題は、フィールド「by」に選択した名前が予約語であることです。このリストにない単語に更新する必要があります。

また、将来的には、false が返されたかどうかを確認し、エラー メッセージmysql_query()を呼び出すことで、何が問題なのかを簡単に確認できます。mysql_error()

于 2013-01-15T19:06:06.767 に答える
1

これを試して:

    CREATE TABLE ban (
    banid int auto_increment primary key, 
    active int,
    ip varchar (20), 
    `by` varchar (20),
    `date` varchar(8),
    reason varchar(20)                                             
        );                                         

    INSERT INTO ban (active, ip, `by`, `date`, reason)
    VALUES 
    (1, '10.25.47.88', 'AUTOBAN', '12-12-45', 'test')
    ;

    SELECT * FROM ban;

http://www.sqlfiddle.com/#!2/1959f/1

いくつかの意見:

他のいくつかのように(例えば@ wintercounter、@ user1909426)、MySQLで制限された単語を使用していると指摘しています。制限された単語を使用する場合は、「(バックティック)」を使用するか、すべての列でそれらを使用してください。

挿入の最初の部分でnullを使用すると、問題が発生すると思います。この列は、おそらくauto_incrementを持つ整数列です。@wintercounterの回答を参照してください。

幸い、日付は制限された名前ではありません。ところで、varchar値の代わりにdate値を使用できるようになりました。

@tadmanからのコメントに関しては、mysqliまたはPDOの代わりにmysqlを使用することはお勧めしません。mysqlライブラリはバージョンPHP5.5以降で廃止されています。phpマニュアルを参照してください。エラー処理も含める必要があります。

完全を期すために、これはMySQLiを使用する場合のphpコードです。

  $link = mysqli_connect($hostname, $username, $password, $database);
  if (!$link){ 
  echo('Unable to connect to database');
  }

  else{
  mysqli_query("INSERT INTO ban (active, ip, `by`, `date`, reason) VALUES (1,'10.25.47.88', 'AUTOBAN', '12-12-45', 'test'))", $link); 
  }

  mysqli_close($link);

mysqlバージョンの場合:

  $hostname = "hostname";
  $username = "username";
  $username = "password";
  $database = "database";

  $link = mysql_connect($hostname, $username, $password);
  mysql_database ($database)
  if (!$link){ 
  echo('Unable to connect to database');
  }

  else{
  mysql_query("INSERT INTO ban (active, ip, `by`, `date`, reason) VALUES (1,'10.25.47.88', 'AUTOBAN', '12-12-45', 'test')"); 
  }

  mysql_close($link);
于 2013-01-19T16:41:58.957 に答える
0

これを試して:

INSERT INTO `banlist` (`banid`, `active`, `ip`, `by`, `date`, `reason`) VALUES ('', 1, '10.25.47.88', 'AUTOBAN', '12-12-45', 'test')

述べたように、'by' は予約済みのキーワードですが、MySQL が解析するのを助けることができるので、それがフィールド名なのかコマンドなのかを知ることができます。

編集: NULL を '' に変更しました。これについてはよくわかりませんが、試したことはありませんが、AI フィールドの場合は、そこで NULL を使用できない可能性があります。空のコンテンツを ID フィールドのプレースホルダーとして使用してください。

于 2013-01-15T19:13:43.350 に答える
0

ミスが発生した行を知るために、各変数でmysqlエラーステートメントを使用してください。

于 2013-01-15T19:09:34.530 に答える
0

php.ini で error_reporting がオフになっているため、クエリはおそらくエラーを表示しません。

error_reporting を E_ALL に設定してみてください。

また、「NULL」を banid の値として送信しているため、クエリが機能しない可能性があります。これは、NULL 値を許可しない主キーまたは外部キー/インデックスである可能性があります。

于 2013-01-15T19:09:42.730 に答える
-3

これを試してください:

INSERT INTO banlist VALUES (NULL, 1, '10.25.47.88', 'AUTOBAN', '12-12-45', 'test')
于 2013-01-15T19:07:11.660 に答える