2013-03-16 33 views
0

我有一個my_sql數據庫設置。其中一個名爲users的表有一些列,其中2個是usr(varchar 32)和email(varchar 255)。每當我嘗試通過PHP將這些表中的數據插入這兩列(或任何其他列)時,該表崩潰。通過php插入mysql數據庫總是導致崩潰

這是從檢查表

mysql> check table users; 
+----------------+-------+----------+-------------------------------------------  + 
| Table   | Op | Msg_type | Msg_text          | 
+----------------+-------+----------+-------------------------------------------  + 
| accounts.users | check | warning | Table is marked as crashed      | 
| accounts.users | check | error | Size of indexfile is: 4096 Should be: 10240 | 
| accounts.users | check | error | Size of datafile is: 0  Should be: 28 | 
| accounts.users | check | error | Corrupt          | 
+----------------+-------+----------+-------------------------------------------  + 
4 rows in set (0.00 sec) 

分析這是PHP命令:

$type  = 'testing'; 
$type  = mysql_real_escape_string($type); 
mysql_query("INSERT INTO users(usr,email) VALUES('$type','$type')"); 

每當我試着插入命令行的數據庫,表不會崩​​潰。

我很難以理解爲什麼會發生這種情況。非常感謝您的幫助。

亞拉文

+2

「表崩潰」是什麼意思? – 2013-03-16 05:53:20

回答

0

我剛剛重新安裝WAMP,並開始工作。謝謝你們的幫助!

3

運行模具()後您的查詢,看看mysql的錯誤是什麼,如果它是MySQL的問題:

mysql_query(' ... ') or die(mysql_error()); 

錯誤應該指向你到你的問題。

+0

考慮到這是一個非常危險的提議,如果您忘記隨後刪除此行,您將向最終用戶公開代碼 – rantsh 2013-03-16 06:12:36

+0

正確,但僅用於調試目的。 – mavili 2013-03-16 11:36:02

2

提高馬維利的答案,我認爲這是更好地做到:

if(!mysql_query($SQL)) { 
    error_log(mysql_error()); 
} 

error_log中可以寫在一個更安全的方式的信息。有關更多詳細信息,請參見the manual for error_log

1

mysql_real_escape_string()返回轉義字符串或錯誤FALSE。如果返回FALSE,它不與您varchar datatype.There兩點

符合使用mysql_real_escape_string()否則會產生一個E_WARNING級的錯誤之前的MySQL連接是必需的,並返回FALSE。

的字符集必須設置或者在服務器級別,或使用API​​函數mysql_set_charset()爲它影響mysql_real_escape_string()