2013-08-11 8 views
0

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

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

Спасибо!

//List all possible variables you can expect the script to receive. 

$expectedVars = array('name', 'email', 'score', 'age', 'date'); 

// This is used for the second part of the query (WHERE, VALUES, ETC) 

$fields = array('uName','uEmail','uScore','uAge','uDate'); 


// Make sure some fields are actually populated.... 
foreach ($expectedVars as $Var) 
{ 
     if (!empty($_GET[$Var])) 
    { 
     $fields[] = sprintf("'%s' = '%s'", $Var,  mysql_real_escape_string($_GET[$Var])); 
} 
} 

if (count($fields) > 0) 
{ 
    // Construct the WHERE Clause 
    $whereClause = "VALUES " . implode(",",$fields); 

    //Create the SQL query itself 
    $sql = ("INSERT INTO $mysql_table ($fields) . $whereClause "); 

echo "1"; //It worked 
mysql_close($con); 
} 
else 
{ 
    // Return 0 if query failed. 
    echo "0"; 
} 

?> 

ответ

1

Вы пропустили mysql_query($sql):

if(!mysql_query($sql)){ 
//die(mysql_error()); 
} 

Пожалуйста, обратите внимание, чтобы использовать PDO или My SQLI используя параметризующий запрос, поскольку mysl_ * функция амортизируется.

+0

Человек, который проводил так много времени, анализируя все остальное, что я полностью пропустил, я знал, что это было что-то глупое. – Chris

+0

Они могли бы очень легко заменить все функции 'mysql_' на' mysqli_', не имея массивной кривой обучения в середине производства. PDO лучше. –

0

Ваш SQL-код ошибочен. Вы используете синтаксис field = value для INSERT, тогда вы объединяете массив, как если бы это была строка ($fields), и вам не хватает пары круглых скобок вокруг значений.

0

несколько вещей: я нашел для php < -> mysql его важно видеть, что происходит в mysql и экспериментировать напрямую с этими запросами в phpmyadmin, когда я застреваю.

1 - в моем коде выводится mysql_error(), когда запрос завершается с ошибкой или когда установлен флаг отладки. это обычно объясняет проблему sql таким образом, что может указывать на имя поля с ошибкой и т. д.

2 - таким образом я могу запросить этот mysql-запрос непосредственно в phpmyadmin и настроить его, пока он не даст мне результаты, которые я хочу , (пока я там, я также могу использовать объяснение, чтобы увидеть, нужно ли мне оптимизировать таблицу)

особенности вашего кода. в отличие от языков C подразумевается sprintf. вот как я напишу ваш код:

// List all possible variables you can expect the script to receive. 
$expectedvars = array('name', 'email', 'score', 'age', 'date'); 

// This is used for the second part of the query (WHERE, VALUES, ETC) 
// $fields = array('uName','uEmail','uScore','uAge','uDate'); 

$fields = array(); 

// Set only the variables that were populated ... 
foreach ($expectedvars as $var) { 
    if (!empty($_GET[$var])) { 
    $name = "u" + ucwords($var); // convert var into mysql field names 
     $fields[] = "{$name} = " . mysql_real_escape_string($_GET[$var]); 
    } 
} 

// only set those fields which are passed in, let the rest use the mysql default 
if (count($fields) > 0) { 

// Create the SQL query itself 
$sql = "INSERT INTO {$mysql_table} SET " . implode("," , $fields); 
$ret = mysql_query($sql); 
if (!$ret) { 
    var_dump('query_failed: ', $sql, $ret); 
    echo "0"; // Query failed 
} else { 
    echo "1"; // It worked 
} 

} else { 
    // Return 0 if nothing to do 
    echo "0"; 
} 

mysql_close($con);