вставка запроса mysql В и УСТАНОВКА проблем


Я уже добрый час или около того чешу в затылке, но не могу понять, что я здесь сделал не так. Я надеюсь, что кто-нибудь сможет указать мне правильное направление.

Я пытаюсь вставить некоторые данные в базу данных 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";
    }
}
?>

Когда я загружаю этот URL-адрес из своего приложения для 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

Кто-нибудь может понять, почему этот код не обновляет таблицу?

Заранее благодарю.

Author: yorksensei, 2011-06-12

6 answers

Похоже, у вас есть поля с такими именами BY, TABLE, TYPE которые являются зарезервированными словами. Используйте для этого обратные кавычки:

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

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

`TYPE` = '$type' ;" );
 1
Author: ypercubeᵀᴹ, 2011-06-12 09:59:12

Вы можете использовать формат набора вставок для запросов mysql

Проблему можно найти, добавив это после вашего запроса

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

Это выдаст вам сообщение об ошибке

На мой взгляд, я бы сказал, что точка с запятой в конце запроса вызовет проблему, это не требуется при вызове через php

Также вы должны поставить обратные метки вокруг названий столбцов. вы, вероятно, обнаружите, что ТИП является зарезервированным словом, поэтому как минимум поставьте обратные метки вокруг TYPE

Также ваш скрипт открыт для внедрения sql. попробуйте использовать $value = mysql_real_escape_string($_GET['значение']), чтобы этого не произошло

 4
Author: bumperbox, 2013-07-30 19:48:49

Вставка не используется с НАБОРОМ, который следует выполнить

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

РЕДАКТИРОВАТЬ:
Если вам нужно указать имена полей, используйте следующее:

INSERT INTO `noise` 
(field1, field2, ....)
VALUES(
    $value1,
    $value2,
    ....
)
 1
Author: Cem Kalyoncu, 2011-06-12 09:09:38

Я никогда не видел INSERT... SET используется. Вы могли бы попробовать более обычный INSERT .. VALUES синтаксис следующий:

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

Как предполагает bumperbox - это, вероятно, сбой, потому что вы используете ключевое слово в качестве одного из своих имен полей. Окружите имена ваших полей обратными метками (`) чтобы избежать их интерпретации MySQL как ключевых слов. например:

`TYPE` = ...
 1
Author: Steve Mayne, 2011-06-12 09:44:15

Проблема в том, что вы смешиваете числа со строками, и строки должны быть заключены в кавычки. У меня было много проблем с этим, и я вернулся к использованию синтаксиса значений.

 0
Author: Joe, 2011-06-14 22:47:20

Я предлагаю отказаться от всего этого и использовать подготовленные заявления в сочетании с PDO. Ваш код в его нынешнем виде уязвим для атаки с использованием SQL-инъекций.

 0
Author: Aquarelle, 2013-02-15 22:49:07