2016-08-16 28 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

谁反对投票这个答案给出了一个很好的理由。 –