2013-04-06 52 views
0

我是相當新的PHP和我一直在試圖插入一系列的變量到MySQL數據庫。但是,似乎在創建表時,數據不會被輸入到表中。我希望有人能告訴我爲什麼。任何幫助將非常感激。PHP的MySQL麻煩添加數據到表

PHP代碼:

<?php 
$team = $_POST['team']; 
$int1 = $_POST['int1']; 
$int2 = $_POST['int2']; 
$int3 = $_POST['int3']; 
$int4 = $_POST['int4']; 
$int5 = $_POST['int5']; 
$int6 = $_POST['int6']; 
$int7 = $_POST['int7']; 
$int8 = $_POST['int8']; 
$int9 = $_POST['int9']; 
$int10 = $_POST['int10']; 
$int11 = $_POST['int11']; 
$int12 = $_POST['int12']; 
$int13 = $_POST['int13']; 
$int14 = $_POST['int14']; 
$con=mysqli_connect("127.0.0.1:3306","root","password","my_db"); 
// Check connection 
if (mysqli_connect_errno()) 
    { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 
$sqli="CREATE TABLE $team(int1 INT,int2 INT,int3 INT,int4 INT,int5 INT,int6 INT,int7 INT,int8 INT,int9 INT,int10 INT,int11 INT,int12 INT,int13 INT,int14 INT)"; 
if (mysqli_query($con,$sqli)) 
    { 
    echo "<br />Table created successfully"; 
    } 
else 
    { 
    echo "<br />Error creating table: " . mysqli_error(); 
    } 
$sql="INSERT INTO $team (int1, int2 ,int3 ,int4 ,int5 ,int6 ,int7 ,int8 ,int9 ,int10 ,int11 ,int12 ,int13 ,int14) 
VALUES ($int1,$int2,$int3,$int4,$int5,$int6,$int7,$int8,$int9,$int10,$int11,$int12,$int13,$int14)"; 
if (mysqli_query($con,$sql)) 
    { 
    echo "<br />Record added"; 
    } 
else 
    { 
    echo "<br />Error adding record"; 
    } 
?> 
+1

爲什麼你檢查連接是否失敗,如果你繼續不管結果如何? – 2013-04-06 14:53:53

+0

你得到的錯誤是什麼? – Kieran 2013-04-06 14:56:26

+1

無論發生這個.php兩次或多次使用$ team的同名名稱,您都會得到一個錯誤,因爲表格已經創建。所以你應該更改爲CREATE TABLE IF NOT EXISTS或甚至更好:不要通過php創建表 - 通過mysql cli創建它們 - 這就是所謂的數據庫設計部分;-) – Yannis 2013-04-06 14:58:44

回答

0

首先,你永遠不應該插入$ _ POST值直接進入數據庫,不使用用strip_tags,ヶ輛或其他一些功能,擺脫可能的惡意代碼。其次,我建議查看MySQL文檔以獲取創建表的正確語法。 http://dev.mysql.com/doc/refman/5.1/en/create-table.html

+0

-1。沒有使用strip_tags()或htmlentities()插入值,絕對沒有錯誤**。這兩種功能都與SQL無關。而且也沒有像「可能的惡意代碼」那樣的東西。 – 2013-04-06 15:07:55

+0

像大多數人一樣,如果在從數據庫中檢索行時回顯值。在我看來,最好在將數據放入數據庫之前進行驗證,而不是在將數據顯示在頁面上之前進行驗證。 除此之外,它們只是我提到的示例功能。 mysql_real_escape也應該被執行。 – Kieran 2013-04-06 15:10:48

0

首先,它存在很大的安全風險,無法進行消毒(驗證)插入數據。其次,在php中使用mysqli_error http://php.net/manual/en/mysqli.error.php來記錄或打印錯誤。

因爲你插入的數據沒有驗證,如果$int1.... $int14中的任何變量爲空或者沒有從請求腳本的表單填充,你的sql查詢變得不正確,並且通過生成某種語法錯誤而失敗,可以是如上所述使用mysqli_error進行跟蹤。

if (mysqli_query($con,$sql)) 
    { 
    echo "<br />Record added"; 
    } 
else 
    { 
    echo "<br />Error ".mysqli_error($con); 
    } 

時看到任何領域的留空什麼可能成爲錯誤的,考慮 提交的值: $團隊=「tbl_team」; $ int1 = 1; $ int2 = 2; $ int3 = 3; $ int4 = 4; $ int5 =''; $ int6 = 6; $ int7 = 7; $ int8 = 8; $ int9 = 9; $ int10 =''; $ int11 = 11; $ int12 = 12; $ int13 = 13; $ int14 = 14;

現在看看會發生什麼你的SQL查詢,如果我們在這種情況下,打印:

$sql="INSERT INTO $team 
       (int1, int2 ,int3 ,int4 ,int5 ,int6 ,int7 , 
        int8 ,int9 ,int10 ,int11 ,int12 ,int13 ,int14) 
     VALUES       
        ($int1,$int2,$int3,$int4,$int5,$int6,$int7, 
        $int8,$int9,$int10,$int11,$int12,$int13,$int14)"; 
print $sql 

將導致:

INSERT INTO tbl_team (int1, int2 ,int3 ,int4 ,int5 ,int6 ,int7 ,int8 ,int9 ,int10 ,int11 ,int12 ,int13 ,int14)VALUES (1,2,3,4,,6,7,8,9,,11,12,13,14)"; 

這是由方式SQL語法問題。

如果你完全是一個新手,並且還沒有理解一個單詞,你可以嘗試使用下面的代碼行作爲你原來的替代品,以獲得更好的機會。

$sql="INSERT INTO $team (int1, int2 ,int3 ,int4 ,int5 ,int6 ,int7 , 
          int8 ,int9 ,int10 ,int11 ,int12 ,int13 ,int14) 
     VALUES 
         ('$int1','$int2','$int3','$int4','$int5','$int6','$int7', 
         '$int8','$int9','$int10','$int11','$int12','$int13','$int14')"; 
+0

最新問題,你爲什麼投了這個答案? – akm 2013-04-06 18:38:04