2011-06-12 119 views
3

我一直在摸索我的頭好一個小時左右,但我無法弄清楚我在這裏做錯了什麼。我希望有人能指出我正確的方向。mysql查詢INSERT INTO和SET問題

我想插入一些數據到SQL數據庫使用INSERT INTO方法,但它似乎並沒有工作。我收錄了很多回聲,看看錯誤可能發生在哪裏。由此我知道代碼是OK,直到INSERT INTO部分被調用。此外,在線檢查數據庫顯示沒有添加任何信息...在線數據庫有3個表格,'噪聲','波'和'脈衝'。此外,所有的字段都存在,所以我真的不明白爲什麼這個代碼失敗。

<?php 
//Connect To Database 
$hostname='myhostname'; 
$username='myusername'; 
$password='mypassword'; 
$dbname='dbname'; 
mysql_connect($hostname,$username, $password) OR DIE ('Unable to connect to database! Please try again later.'); 
mysql_select_db($dbname); 

// test to see what kind of instrument is being uploaded. 

$type=strip_tags($_GET['TYPE']); 

if($type == 'noise') { 
    $audio=strip_tags($_GET['AUDIO']); 
    echo $audio; 
    $automate=strip_tags($_GET['AUTOMATE']); 
    echo $automate; 
    $by=strip_tags($_GET['BY']); 
    echo $by; 
    $envelope=strip_tags($_GET['ENVELOPE']); 
    echo $envelope; 
    $length=strip_tags($_GET['LENGTH']); 
    echo $length; 
    $name=strip_tags($_GET['NAME']); 
    echo $name; 
    $notes=strip_tags($_GET['NOTES']); 
    echo $notes; 
    $output=strip_tags($_GET['OUTPUT']); 
    echo $output; 
    $patchname=strip_tags($_GET['PATCH_NAME']); 
    echo $patchname; 
    $s_cmd=strip_tags($_GET['S_CMD']); 
    echo $s_cmd; 
    $shape=strip_tags($_GET['SHAPE']); 
    echo $shape; 
    $table=strip_tags($_GET['TABLE']); 
    echo $table; 
    $table0=strip_tags($_GET['table0']); 
    echo $table0; 
    $table1=strip_tags($_GET['table1']); 
    echo $table1; 
    $table2=strip_tags($_GET['table2']); 
    echo $table2; 
    $table3=strip_tags($_GET['table3']); 
    echo $table3; 
    $table4=strip_tags($_GET['table4']); 
    echo $table4; 
    $table5=strip_tags($_GET['table5']); 
    echo $table5; 
    $table6=strip_tags($_GET['table6']); 
    echo $table6; 
    $table7=strip_tags($_GET['table7']); 
    echo $table7; 
    $table8=strip_tags($_GET['table8']); 
    echo $table8; 
    $table9=strip_tags($_GET['table9']); 
    echo $table9; 
    $tableA=strip_tags($_GET['tableA']); 
    echo $tableA; 
    $tableB=strip_tags($_GET['tableB']); 
    echo $tableB; 
    $tableC=strip_tags($_GET['tableC']); 
    echo $tableC; 
    $tableD=strip_tags($_GET['tableD']); 
    echo $tableD; 
    $tableE=strip_tags($_GET['tableE']); 
    echo $tableE; 
    $tableF=strip_tags($_GET['tableF']); 
    echo $tableF; 

    //input this info into the SQL noise instrument table 
    $request = mysql_query("INSERT INTO `noise` SET 
     AUDIO = '$audio', 
     AUTOMATE = '$automate', 
     BY = '$by', 
     ENVELOPE = '$envelope', 
     LENGTH = '$length', 
     NAME ='$name', 
     NOTES = '$notes', 
     OUTPUT = '$output', 
     PATCH_NAME = '$patchname', 
     S_CMD = '$s_cmd', 
     SHAPE = '$shape', 
     TABLE = '$table', 
     table0 = '$table0', 
     table1 = '$table1', 
     table2 = '$table2', 
     table3 = '$table3', 
     table4 = '$table4', 
     table5 = '$table5', 
     table6 = '$table6', 
     table7 = '$table7', 
     table8 = '$table8', 
     table9 = '$table9', 
     tableA = '$tableA', 
     tableB = '$tableB', 
     tableC = '$tableC', 
     tableD = '$tableD', 
     tableE = '$tableE', 
     tableF = '$tableF', 
     TYPE = '$type';"); 
if($request) { 
    echo "Your patch has been successfully uploaded."; 
    echo "Thanks for contributing!"; 
} 
else { 
    echo "there has been a problem"; 
    } 
} 
?> 

當我從我的iPhone應用程序加載此網址:

NSString *website = [NSString stringWithFormat:@"http://mywebsite/problem.php?AUDIO=%@&AUTOMATE=%@&BY=%@&ENVELOPE=%@&LENGTH=%@&NAME=%@&NOTES=%@&OUTPUT=%@&PATCH_NAME=%@&S_CMD=%@&SHAPE=%@&TABLE=%@&table0=%@&table1=%@&table2=%@&table3=%@&table4=%@&table5=%@&table6=%@&table7=%@&table8=%@&table9=%@&tableA=%@&tableB=%@&tableC=%@&tableD=%@&tableE=%@&tableF=%@&TYPE=%@", audio, automate, by, envelope, length, name, notes, output, patch_name, s_cmd, shape, table, table0, table1, table2, table3, table4, table5, table6, table7, table8, table9, tableA, tableB, tableC, tableD, tableE, tableF, type]; 
    [BackgroundLoader loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:website]]]; 

我得到的輸出是:

AUDIOAUTOMATEBYENVELOPELENGTHNAMENOTESOUTPUTPATCH_NAMES_CMDSHAPETABLETABLE0...TABLEFthere has been a problem 

有人能看到爲什麼這個代碼不更新表?

在此先感謝。

+0

所以你的問題在於這些:'$ ... =用strip_tags($ _ GET [ '...']); '.. hmmmm – LouwHopley 2011-06-12 09:11:41

+0

只能使用SET和UPDATE。 – kinakuta 2011-06-12 09:11:52

回答

1

看來你有一個名爲像BYTABLETYPE這是保留字的字段。使用反引號爲這些:

`BY` = '$by', 
... 

`TABLE` = '$table', 
... 

`TYPE` = '$type' ;"); 
+0

這個修好了!非常感謝幫忙。 – yorksensei 2011-06-12 11:05:44

+1

@yorksensei:另請參見使用'VALUES'語法對INSERT INTO表進行(標準)方法的其他解答。 「INSERT ... SET」語法僅由MySQL使用,所以最好使用另一個,以防萬一需要更改RDBMS(需要更少的代碼更改)。 – 2011-06-12 11:30:50

+0

感謝您的評論。我將按照陳述重寫。再次感謝您的出色幫助。 – yorksensei 2011-06-14 04:04:48

1

插入不與SET以下使用應該做

INSERT INTO `noise` VALUES(
    $value, 
    .... 
) 

編輯:
如果需要指定字段名使用以下命令:

INSERT INTO `noise` 
(field1, field2, ....) 
VALUES(
    $value1, 
    $value2, 
    .... 
) 
+1

MySQL允許插入一組語句http://dev.mysql.com/doc/refman/5.5/en/insert.html – bumperbox 2011-06-12 09:20:05

+0

@bumperbox:從來不知道的是,THX。 – 2011-06-12 11:29:49

1

我從來沒有見過INSERT ..使用SET。你可以嘗試更常見的INSERT ... VALUES語法如下:

INSERT INTO <table name> (`FIELD1`, `FIELD2`) 
VALUES (VALUE1, VALUE2) 

由於bumperbox暗示 - 它可能失敗,因爲您使用的關鍵字作爲您的字段名稱之一。使用反引號(`)來包圍您的字段名稱,以避免它們被MySQL解釋爲關鍵字。例如:

`TYPE` = ... 
+1

MySQL允許插入一組語句http://dev.mysql.com/doc/refman/5.5/en/insert.html – bumperbox 2011-06-12 09:20:13

+1

@bumperbox - 我並沒有意識到這一點 - 我會考慮到這一點編輯我的答案。 – 2011-06-12 09:21:43

4

可以使用插套格式爲MySQL查詢

的問題可以通過查詢後加入本作中找到

if (mysql_error()) { 
    die (mysql_error()); 
} 

會給你一個錯誤消息

在猜測我會說在查詢結束時的分號會導致一個問題,這不是必需的,當通過php調用

你也應該在列名稱周圍加反引號。你可能會發現TYPE是一個保留字,所以在最低限度的時候會反過來TYPE

你的腳本也是開放的sql注入。嘗試使用$值= mysql_real_escape_string($ _ GET [「值」])停止這種情況發生

+0

感謝您的提示。我相應地修改了我的代碼。 – yorksensei 2011-06-12 11:11:38

0

問題是你是混合數字與字符串和字符串必須引用。我遇到了很多麻煩,並已切換回使用值語法。

0

我建議拋棄了這一切,並使用與PDO組合預處理語句。現在,您的代碼容易受到SQL注入攻擊。