mysql查询INSERT INTO和SET问题

时间:2011-06-12 09:07:56

标签: php mysql insert set

我现在已经摸不着头了好一个小时,但是我无法弄清楚我在这里做错了什么。我希望有人能指出我正确的方向。

我试图使用INSERT INTO方法将一些数据插入到SQL数据库中,但它似乎不起作用。我包含了许多回声,看看尝试,看看错误到底在哪里。从此我知道代码是正常的,直到调用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

任何人都可以看到为什么这段代码没有更新表格?

提前致谢。

6 个答案:

答案 0 :(得分:4)

您可以使用mysql查询的插入集格式

通过在查询后添加此问题可以找到问题

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

会给你一个错误信息

猜测我会说查询结尾的分号会引起问题,这在通过php调用时不需要

你也应该在列名称周围添加反引号。你可能会发现TYPE是一个保留字,所以至少要在[{1}}

周围加上反引号

你的脚本也开放给sql注入了。尝试使用$ value = mysql_real_escape_string($ _ GET ['value'])来阻止这种情况发生

答案 1 :(得分:1)

插入不与SET一起使用

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

编辑:
如果需要指定字段名称,请使用以下命令:

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

答案 2 :(得分:1)

我从未见过使用INSERT ... SET。您可以尝试更常见的INSERT .. VALUES语法,如下所示:

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

正如保险箱所暗示的那样 - 它可能会失败,因为你使用关键字作为你的一个字段名称。用反引号(`)包围你的字段名称,以避免它们被MySQL解释为关键字。 e.g:

`TYPE` = ...

答案 3 :(得分:1)

您似乎拥有名为BYTABLETYPE的字段,这些字段是保留字。使用反引号:

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

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

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

答案 4 :(得分:0)

问题是你是在用字符串混合数字而且必须引用字符串。我遇到了很多麻烦,并且已经切换回使用值语法。

答案 5 :(得分:0)

我建议放弃所有这些并将预准备语句与PDO结合使用。您的代码目前很容易受到SQL注入攻击。