簡體   English   中英

PHP MySQL-我做錯什么了嗎?

[英]PHP MySQL - Am I doing anything wrong?

現在兩個小時,我正在嘗試在表中插入一個值。 我沒有任何錯誤,我也找不到問題!

我要插入的值:

$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);

我找不到問題! 我有什么想念的嗎? 兩個表都存在。

問題是您為“ by”字段選擇的名稱是保留字。 您必須將其更新為不在此列表中的單詞。

另外,將來您可以通過檢查mysql_query()返回false,然后調用mysql_error()以獲得錯誤消息來輕松查看問題所在。

嘗試這個:

    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答案。

幸運的是date不是受限制的名稱。 順便說一句,您現在可以使用日期值代替varchar值。

關於@tadman中的注釋,建議不要使用mysql而不是mysqli或PDO。 mysql庫從PHP 5.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);

在每個變量中使用mysql錯誤語句,以了解您的錯誤發生在哪一行。

該查詢可能不會顯示錯誤,因為在php.ini中已打開error_reporting:

嘗試將error_reporting設置為E_ALL。

此外,查詢可能不起作用,因為您要發送“ NULL”作為banid的值,這可能是不允許NULL值的主鍵或外鍵/索引。

嘗試這個:

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字段的占位符即可。

嘗試一下:

INSERT INTO banlist VALUES (NULL, 1, '10.25.47.88', 'AUTOBAN', '12-12-45', 'test')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM