0

mysqli_real_escape_stringを使用すると、構文エラーが返されます。私が使用しているIDEには構文上の問題はありませんが、この関数を複数のCASEステートメントで使用しようとしたのはこれが初めてです(実際、この関数はあまり使用していません)。

挿入コードは次のとおりです。

$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);
}

dbへの接続は、構成ファイルの次のコードを介して成功します。

$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ステートメントによるものですか?このステートメントの挿入時にmysqli_real_escape_stringが使用されていることを示す例をオンラインまたはphpマニュアルで見つけることができません。

マーティンに関して

4

2 に答える 2

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
          )";

必要に応じて、すべてが現在機能しているようです。

于 2012-11-19T08:35:15.130 に答える
0

本当に必要な場合は、次のようなSQL IF操作を引き続き使用します。

IF [条件] THEN [文] 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."
)";
于 2012-11-18T13:30:57.440 に答える