2011-12-18 2 views
0

я получаю следующее сообщение об ошибке при попытке обновить один из моих таблиц базы данных:Генерация SQL с Sprintf(): "Слишком мало аргументов"

idrr = 167 

age_notes = 'Enumerate, Louisvilleluminary, Nacho Friend, Bulls and Bears, Bricklayer, Activity Report, Interactif, Soundman).\r\n 

\r\nBashford Manor S (gr-III, 6f, defeating Flatter Than Me, Brassy Boy, Grand Slam Andre, Soundman, Westrock Gold, Vito Filitto, Even Wilder).\r\n 

\r\nA maiden special weight race at Churchill Downs (5f, by 2 3/4, defeating Thiskyhasnolimit, Red Rally, Dublin, Criminal Offense, Congar, Horst, Prospective Union, Victorystart, Harley\'s Heat).' 

Предупреждение: Sprintf() [function.sprintf] : Слишком мало аргументов в /data/19/1/60/63/1875552/user/2038041/htdocs/vinery/Admin/upload_stallion.php по строке 305 Запрос был пустой

Прямо над Предупреждение эхо из двух переменных, используемых в sprintf().

Вот раздел из моего файла PHP:

 $idrr = GetSQLValueString($_POST['id1'], "int"); 
     $associated_horse = GetSQLValueString($_POST['associated_horse1'], "int"); 
     $year = GetSQLValueString($_POST['year1'], "text"); 
     $age = GetSQLValueString($_POST['age1'], "int"); 
     $starts = GetSQLValueString($_POST['starts1'], "int"); 
     $first = GetSQLValueString($_POST['first1'], "int"); 
     $first_sw = GetSQLValueString($_POST['first_sw1'], "int"); 
     $second = GetSQLValueString($_POST['second1'], "int"); 
     $second_sp = GetSQLValueString($_POST['second_sp1'], "int"); 
     $third = GetSQLValueString($_POST['third1'], "int"); 
     $third_sp = GetSQLValueString($_POST['third_sp1'], "int"); 
     $age_notes = GetSQLValueString($_POST['age_notes1'], "text"); 
     $age_text = GetSQLValueString($_POST['age_text1'], "text"); 
     $earned = GetSQLValueString($_POST['earned1'], "text"); 
     echo ("idrr = " . $idrr . "<br/>"); 
     echo ("age_notes = " . $age_notes); 




     $insertSQL = sprintf("UPDATE race_records SET age_notes = $age_notes WHERE rr_id = %s", GetSQLValueString($idrr, "int")); 

     mysql_select_db($database_XXXXXX, XXXXXX); 
     $Result = mysql_query($insertSQL, $HDAdave) or die(mysql_error()) 

Я не могу понять, почему этот UPDATE не будут работать. Может ли кто-нибудь увидеть, что я делаю неправильно?

ответ

1

Вы можете поставить кавычку или одиночные кавычки вокруг $age_notes и %s

$insertSQL = sprintf("UPDATE race_records SET age_notes = '$age_notes' WHERE rr_id = '%s'", GetSQLValueString($idrr, "int")); 
+0

Это не поможет с ошибкой 'sprintf()'. –

+0

Добавлен эхо GetSQLValueString ($ _ POST ['id1'], "int"); и поместите '' вокруг age_notes и% s. – user1028866

+0

Ответ теперь: – user1028866

0

эмпирическое правило не смешивать Sprintf с $ вар-замещенных строк. Таким образом, вы должны использовать либо

$insertSQL = sprintf("UPDATE race_records SET age_notes = '%s' WHERE rr_id = '%s'", mysql_real_escape_string($age_notes), mysql_real_escape_string(GetSQLValueString($idrr, "int"))); 

или

$insertSQL = "UPDATE race_records SET age_notes = '" . mysql_real_escape_string($age_notes) . "' WHERE rr_id = '" . mysql_real_escape_string(GetSQLValueString($idrr, "int")) . "'"; 

Вы получали сообщение об ошибке, вероятно, потому, что $age_notes содержит символ%, и это портя sprintf.

@ Рекомендация cenanozen по использованию кавычек тоже хороша (хотя она не отвечает на ваш конкретный вопрос).

Не забудьте указать все строки в SQL, используя mysql_real_escape_string() или что-то еще!

Смежные вопросы