2012-05-10 27 views
0
$sql = "INSERT INTO $table_name VALUES 
('$_POST[firstname]', '$_POST[lastname]', '$_POST[username]', password('$_POST[password]'), 'Users', '', '', '$pchange', 
'$_POST[email]', '$default_url', '$verify', '', 0, '', 0)"; 

$result = @mysql_query($sql,$connection) or die(mysql_error()); 

$的SQL,$連接和$ table_name的都是合法的,並在腳本和數據庫使用過,這是我的數據庫看起來像:PHP將不插入到MySQL,沒有錯誤

firstname varchar(20) latin1_swedish_ci  Yes NULL   Change  Drop More 
lastname varchar(20) latin1_swedish_ci  Yes NULL   Change  Drop More 
username varchar(20) latin1_swedish_ci  Yes NULL   Change  Drop More 
password varchar(50) latin1_swedish_ci  Yes NULL   Change  Drop More 
group1  varchar(20) latin1_swedish_ci  Yes NULL   Change  Drop More 
group2  varchar(20) latin1_swedish_ci  Yes NULL   Change  Drop More 
group3  varchar(20) latin1_swedish_ci  Yes NULL   Change  Drop More 
pchange  varchar(1) latin1_swedish_ci  Yes NULL   Change  Drop More 
email  varchar(100)latin1_swedish_ci  Yes NULL   Change  Drop More 
redirect varchar(100)latin1_swedish_ci  Yes NULL   Change  Drop More 
verified varchar(1) latin1_swedish_ci  Yes NULL   Change  Drop More 
last_login date        Yes NULL   Change  Drop More 
balance  double  UNSIGNED    Yes 0    Change  Drop More 
address  varchar(60) latin1_swedish_ci  Yes NULL   Change  Drop More 
lostbalance double        Yes 0    Change  Drop More 

在此先感謝。

+2

不要使用錯誤抑制操作如果你想看看有什麼不對。 –

+1

echo $ sql,看看你是否可以在mysql裏手動運行它。 – FreudianSlip

+1

擺脫那個'@'!!!!!!!!!! – itachi

回答

4

沒有錯誤的面前:

@mysql_query($sql,$connection) or die(mysql_error()); 

的@從mysql_query()函數抑制誤差。

我看到了多個錯誤在你的語句:

  1. '$_POST[firstname]' - 被suppossed是$_POST['firstname']。在一個變量或使用串聯存儲值:"'.$_POST['firstname'].'"

  2. 使用mysql_query($sql) or die(mysql_error());

  3. 逃避所有你存儲在數據庫中的數據。

+1

要進一步評論這個,請閱讀:[爲什麼'foo [bar]'錯誤?](http://php.net/manual/en/language.types.array.php)(在頁面上搜索它,它不提供該段落的直接鏈接) – ccKep

+0

'「$ _POST [firstname]」'是正確的。 http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing –

-2

你必須命名錶列,因爲@的 「價值觀」

INSERT INTO $table_name (field_1, field2, ...) VALUES ($_POST_1, ...) 
+1

只有當提供的值數與列數不匹配時。 – AlienWebguy

1

首先,保留任何用戶輸入都是不好的安全做法,因爲很快你就會成爲SQL注入和/或XSS攻擊的受害者。你應該過濾用戶輸入的是這樣的:

$var = filter_var($_POST['var']), FILTER_SANITIZE_STRING);

那麼你應該在你的SQL查詢中使用此$var,而不是直接使用$_POST['var'].即:

$sql = "INSERT INTO $table_name VALUES 
('$firstname', '$lastname', '$username', password('$password'), 'Users', '', '', '$pchange', 
'$email', '$default_url', '$verify', '', 0, '', 0)";