2012-11-18 178 views
0

即時使用mysqli_real_escape_string時,我有語法錯誤拋回給我。我正在使用的IDE沒有顯示語法問題,但是這是我第一次嘗試在多個CASE語句中使用此函數(事實上,我還沒有非常多地使用這個函數)。mysqli_real_escape_string當使用CASE插入到db時正確的語法

插入代碼是在這裏:

$query = "INSERT INTO `auctionwp_categories` 
     (`CategoryID`, `CategoryLevel`, `CategoryName`, `CategoryParentID`, `LeafCategory`, `AutoPayEnabled`, `BestOfferEnabled`, `Expired`, `IntlAutosFixedCat`, `Virtual`, `LSD`, `ORPA`) 
    VALUES (
      '".mysqli_real_escape_string($link, $xmlCategoryID)."', '".mysqli_real_escape_string($link, $xmlCategoryLevel).", '".mysqli_real_escape_string($link, $xmlCategoryName).", '".mysqli_real_escape_string($link, $xmlCategoryParentID).", 
      CASE '".mysqli_real_escape_string($link, $xmlLeafCategory)."' WHEN 'true' THEN 1 ELSE 0 END, 
      CASE '".mysqli_real_escape_string($link, $xmlAutoPayEnabled)."' WHEN 'true' THEN 1 ELSE 0 END, 
      CASE '".mysqli_real_escape_string($link, $xmlExpired)."' WHEN 'true' THEN 1 ELSE 0 END, 
      CASE '".mysqli_real_escape_string($link, $xmlBestOfferEnabled)."' WHEN 'true' THEN 1 ELSE 0 END, 
      CASE '".mysqli_real_escape_string($link, $xmlIntlAutosFixedCat)."' WHEN 'true' THEN 1 ELSE 0 END, 
      CASE '".mysqli_real_escape_string($link, $xmlVirtual)."' WHEN 'true' THEN 1 ELSE 0 END, 
      CASE '".mysqli_real_escape_string($link, $xmlLSD)."' WHEN 'true' THEN 1 ELSE 0 END, 
      CASE '".mysqli_real_escape_string($link, $xmlORPA)."' WHEN 'true' THEN 1 ELSE 0 END 
     )"; 

if (mysqli_query($link, $query)) { 
echo "Successfully inserted " . mysqli_affected_rows($link) . " row"; 
} else { 
echo "Error occurred: " . mysqli_error($link); 
} 

連接到數據庫通過這個代碼是全成在配置文件:

$user="root"; 
$pass=""; 
$database="auctionwp"; 
$server="localhost"; 

$link = mysqli_connect($server, $user, $pass, $database); 

if (!$link) { 
die('Connect Error (' . mysqli_connect_errno() . ') ' 
     . mysqli_connect_error()); 
} 

echo 'Success... ' . mysqli_get_host_info($link) . "\n"; 

是我的語法問題,由於CASE語句?我找不到任何在線的例子或PHP手冊,顯示mysqli_real_escape_string上插入這個說法被用於,

問候 馬丁

回答

0

感謝您的回覆,我還沒機會看到,有人說我設法得到它的工作保持CASE語句完整,它實際上是很容易,一旦我的頭靠近了它。 我所做的就是這樣的:

// escape the returned values 
$xmlCategoryName = mysqli_real_escape_string($link, $xmlCategoryName); 
$xmlLeafCategory = mysqli_real_escape_string($link, $xmlLeafCategory); 
$xmlBestOfferEnabled = mysqli_real_escape_string($link, $xmlBestOfferEnabled); 
$xmlAutoPayEnabled = mysqli_real_escape_string($link, $xmlAutoPayEnabled); 
$xmlExpired = mysqli_real_escape_string($link, $xmlExpired); 
$xmlIntlAutosFixedCat = mysqli_real_escape_string($link, $xmlIntlAutosFixedCat); 
$xmlVirtual = mysqli_real_escape_string($link, $xmlVirtual); 
$xmlLSD = mysqli_real_escape_string($link, $xmllSD); 
$xmlORPA = mysqli_real_escape_string($link, $xmlORPA); 


// the insert query for the values 
$query = "INSERT INTO `auctionwp_categories` 
     (`CategoryID`, `CategoryLevel`, `CategoryName`, `CategoryParentID`, `LeafCategory`, `AutoPayEnabled`, `BestOfferEnabled`, `Expired`, `IntlAutosFixedCat`, `Virtual`, `LSD`, `ORPA`) 
    VALUES (
      '".$xmlCategoryID."', '".$xmlCategoryLevel."', '".$xmlCategoryName."', '".$xmlCategoryParentID."', 
      CASE '$xmlLeafCategory' WHEN 'true' THEN 1 ELSE 0 END, 
      CASE '$xmlAutoPayEnabled' WHEN 'true' THEN 1 ELSE 0 END, 
      CASE '$xmlExpired' WHEN 'true' THEN 1 ELSE 0 END, 
      CASE '$xmlBestOfferEnabled' WHEN 'true' THEN 1 ELSE 0 END, 
      CASE '$xmlIntlAutosFixedCat' WHEN 'true' THEN 1 ELSE 0 END, 
      CASE '$xmlVirtual' WHEN 'true' THEN 1 ELSE 0 END, 
      CASE '$xmlLSD' WHEN 'true' THEN 1 ELSE 0 END, 
      CASE '$xmlORPA' WHEN 'true' THEN 1 ELSE 0 END 
     )"; 

一切似乎爲所需的權限是現在的工作。

+2

當它沒有明確需要時,將所有開銷放到查詢中仍然不是一種好的做法!不僅你發送你的查詢一個字符串,它比布爾值「更長」,但是你仍然需要執行你的語句!和一個案例/開關語句只有兩個選項真的尖叫一個IF!因此你正在使用mysqli你必須在mysql服務器上工作,這裏的語法** case'$ var'when'true'then 1 else 0 end,** should be ** if('$ var'='true' ,1,0)**它增加了:可讀性和可能的​​速度!不過,我仍然堅持在MySQL的一個PHP檢查;) – Ivo

0

,如果我真的不得不,我仍然會使用一個SQL IF操作肚裏如下:

IF [條件]→[聲明] ELSE [聲明] END IF

但因爲你在PHP的工作已經何必呢?去PHP中的if語句;)

$query = "INSERT INTO `auctionwp_categories` (`CategoryID`, `CategoryLevel`, `CategoryName`, `CategoryParentID`, `LeafCategory`, `AutoPayEnabled`, `BestOfferEnabled`, `Expired`, `IntlAutosFixedCat`, `Virtual`, `LSD`, `ORPA`) VALUES ( 
    '".mysqli_real_escape_string($link, $xmlCategoryID)."', 
    '".mysqli_real_escape_string($link, $xmlCategoryLevel).", 
    '".mysqli_real_escape_string($link, $xmlCategoryName).", 
    '".mysqli_real_escape_string($link, $xmlCategoryParentID).", 
    ".mysqli_real_escape_string($link, $xmlLeafCategory) == 'true' ? 1 : 0.", 
    ".mysqli_real_escape_string($link, $xmlAutoPayEnabled) == 'true' ? 1 : 0.", 
    ".mysqli_real_escape_string($link, $xmlExpired) == 'true' ? 1 : 0.", 
    ".mysqli_real_escape_string($link, $xmlBestOfferEnabled) == 'true' ? 1 : 0.", 
    ".mysqli_real_escape_string($link, $xmlIntlAutosFixedCat) == 'true' ? 1 : 0.", 
    ".mysqli_real_escape_string($link, $xmlVirtual) == 'true' ? 1 : 0.", 
    ".mysqli_real_escape_string($link, $xmlLSD) == 'true' ? 1 : 0.", 
    ".mysqli_real_escape_string($link, $xmlORPA) == 'true' ? 1 : 0." 
)";