2016-08-16 55 views
0

我從joomla數據庫檢索數據。從數據庫獲取內容並更新內容生成錯誤

我在內容中搜索標籤<img alt=''">,我希望將alt標記值作爲文章標題。

但是當我更新數據庫中的內容時,出現以下錯誤。

「錯誤更新記錄:您在您的SQL語法錯誤;檢查 對應於您的MySQL服務器版本的權利 語法附近的使用手冊中,迎合不同的測試需求 組織,它具有在第1行的f'

請檢查下面給出的代碼。

$link= "SELECT * FROM as23dc_content LIMIT 1"; 
$link_result = mysqli_query($conn, $link); 

while($row_link= mysqli_fetch_assoc($link_result)) { 

    $content = $row_link["introtext"]; 

    $add_alt_title = 'alt="'.$row_link["title"].'"'; 

    $content1 = preg_replace('/(alt)=("[^"]*")/i', "$add_alt_title", $content); 

     //echo $content1; 

      $sql = "UPDATE as23dc_content SET introtext='".$content1."' WHERE id='".$row_link["id"]."'"; 
      //print_r($sql); 

      if(mysqli_query($conn, $sql)) { 
       echo "Record updated successfully"; 
     } else { 
       echo "Error updating record: " . mysqli_error($conn); 
     } 
} 
+1

就在你的'$ sql =「UPDATE ...」'你有一個'print_r($ sql)'。它顯示了什麼? – BeetleJuice

+0

你是在Joomla之外還是在Joomla的任何擴展之內? –

+0

Tushar已經有一段時間了,你沒有選擇任何答案,也沒有給出任何反饋。理解你的問題需要很多,找到一個解決方案併爲你寫出來。如果解決方案爲您工作,請選擇並上傳它。如果沒有,至少讓我們知道爲什麼我們(誰試圖幫助)也可以從這個問題中學習。 – BeetleJuice

回答

1

的問題是,你的$content1串有混淆的SQL語法分析器報價因爲它很難知道價值何時結束。

使用準備好的語句,而不是因爲他們使它不可能解析器變得混亂

//Put '?' where the values would be 
$sql = "UPDATE as23dc_content SET introtext = ? WHERE id = ?" 
$stmt = mysqli_prepare($conn, $sql) or die (mysqli_error($conn)); 

//bind the values to the '?' parameters (replace 's' with 'i' for integer values) 
$stmt->bind_param('ss', $content1, $row_link['id']); 

//execute the query and abort on error 
$stmt->execute() or die ($stmt->error); 

if($stmt->affected_rows) echo "Record updated successfully." 
else echo "Record could not be found. No change was made." 
-1

您可以使用此

$content1 = preg_replace('/(alt)=("[^"]*")/i', "$add_alt_title", $content); 
$content1 = mysqli_real_escape_string($conn, $content1);//Procedural 

OR

$content1 = preg_replace('/(alt)=("[^"]*")/i', "$add_alt_title", $content); 
$content1 = $conn->real_escape_string($content1);//OOPS 

逃脫單引號之後你可以插入數據庫。

+0

誰反對投票這個答案給出了一個很好的理由。 –