我现在已经摸不着头了好一个小时,但是我无法弄清楚我在这里做错了什么。我希望有人能指出我正确的方向。
我试图使用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
任何人都可以看到为什么这段代码没有更新表格?
提前致谢。
答案 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)
您似乎拥有名为BY
,TABLE
,TYPE
的字段,这些字段是保留字。使用反引号:
`BY` = '$by',
...
`TABLE` = '$table',
...
`TYPE` = '$type' ;" );
答案 4 :(得分:0)
问题是你是在用字符串混合数字而且必须引用字符串。我遇到了很多麻烦,并且已经切换回使用值语法。
答案 5 :(得分:0)
我建议放弃所有这些并将预准备语句与PDO结合使用。您的代码目前很容易受到SQL注入攻击。