我有一個運行腳本的cronjob - >從不同的iTunes商店獲取數據。有時候我會收到上面提到的錯誤信息。PHP警告:sprintf():參數太少
我認爲它是因爲特殊字母或類似的東西。有沒有辦法檢查問題的確切位置?哪個「特殊字符」可以對錯誤進行抑制。 IF語句有沒有解決方法?
我不能重現錯誤,因爲它並不總是出現。在這方面獲得幫助會很好。
下面是代碼:
所有的foreach ($Kategorien->entry as $item) {
$id = addslashes($item->id);
$title = utf8_decode(addslashes($item->title));
$preview = addslashes($item->link[1]["href"]);
$namespaces = $item->getNameSpaces(true);
$im = $item->children($namespaces['im']);
$track_title = utf8_decode(addslashes($im->name));
$track_artist = utf8_decode(addslashes($im->artist));
$track_amount = addslashes($im->price->attributes()->amount);
$track_currency = utf8_decode(addslashes($im->price->attributes()->currency));
$release_date = addslashes($im->releaseDate);
$image = addslashes($im->image[2]);
$entry_id['im'] = $item->id->attributes('im', TRUE);
$track_id = addslashes($entry_id['im']['id']);
$category_id['im'] = $item->category->attributes('im', TRUE);
$genre_id = addslashes($category_id['im']['id']);
$genre_cat = utf8_decode(addslashes($item->category->attributes()->term));
$insertSQL = sprintf("UPDATE track_itunes_countries_total SET modified = NOW(), modified_genre = '$genre_name' WHERE id = ".$row_select_country['id']."");
$Result1 = mysql_query($insertSQL, $con) or die(mysql_error());
$insertSQL = sprintf("INSERT INTO track_itunes_".$cc."_total (id, title, preview, track_title, track_artist, track_amount, track_currency, release_date, image, track_id, genre_id, genre_cat, country, Online, Approved) VALUES ('$id', '$title', '$preview', '$track_title', '$track_artist', '$track_amount', '$track_currency', '$release_date', '$image', '$track_id', '$genre_id', '$genre_cat', '$cc', '1', '1') ON DUPLICATE KEY UPDATE title='$title',preview='$preview',track_title='$track_title',track_artist='$track_artist',track_amount='$track_amount',track_currency='$track_currency',release_date='$release_date',image='$image',track_id='$track_id',genre_id='$genre_id',genre_cat='$genre_cat',country='$cc'");
$Result1 = mysql_query($insertSQL, $con);}
爲什麼你也使用'sprintf()'也定義了$ cc'? – Rizier123 2015-02-06 11:27:46
導致問題的特殊字符是'%'。旁註1:如果你不使用sprintf,而是直接使用字符串,你的代碼可以正常工作(關於特殊字符問題)。旁註2:構建SQL-Queries的這種方式很容易被SQL注入攻擊所攻擊。 – scones 2015-02-06 11:31:54
你能舉一個例子如何以安全的方式解決它嗎?我不是「那麼」熟悉它。 PS。 $ cc在代碼中定義 - >但在代碼段 – LJSven 2015-02-06 11:40:40