当查询具有&符号时,Joomla 1.7 DB Query不起作用

时间:2011-12-11 22:02:32

标签: php mysql sql joomla ampersand

我对此心理敏感。到目前为止,我已经尝试了几个小时。这是任务:

在模块覆盖中,我使用以下代码:

$db =& JFactory::getDBO();
$title = "Analysen & Auswertungen Infos";
$query = "SELECT introtext FROM #__content WHERE title=\"$title\"";
$db->setQuery($query);
$result = $db->loadRow();
echo $result;

这样可行,但由于我从变量动态获取$title,我需要这个工作:

$db =& JFactory::getDBO();
$title = "$linktext Infos";
$query = "SELECT introtext FROM #__content WHERE title=\"$title\"";
$db->setQuery($query);
$result = $db->loadRow();
echo $result;

我有6个变量在foreach循环中填充$linktext,除了包含“&”的字符串之外的所有工作...

我在查询中尝试了htmlentities和utf8_encode以及“和'的不同类型(实际上所有组合)......没有用。

我在phpmyadmin中使用以下sql查询,它可以工作:

SELECT `introtext` FROM `x999x_content` WHERE `title`="Analysen & Auswertungen Infos"

我对此感到困惑,现在非常疲惫和愤怒...... 任何帮助将不胜感激!!!

4 个答案:

答案 0 :(得分:2)

有时长时间睡眠是最好的!

我刚刚使用strlen检查$linktext的长度(我通过foreach循环从DB获得)并发现它比可见字符更长。这是合乎逻辑的,因为&返回为&

为了在新的数据库查询中使用此$linktext,我需要做的就是解码html实体:

$db =& JFactory::getDBO();
// this is the correct way of doing it
$title = html_entity_decode($linktext)." Infos"; 
$query = "SELECT introtext FROM #__content WHERE title=\"$title\"";
$db->setQuery($query); 
$result = $db->loadRow(); 

或查询的任何其他组合(“,',`,$ query->选择),如其他答案所述

答案 1 :(得分:0)

你有没有尝试过:

$db =& JFactory::getDBO(); 
$title = $linktext." Infos"; 
$query = "SELECT `introtext` FROM `#__content` WHERE `title`='".$title."'"; 
$db->setQuery($query); 
$result = $db->loadRow(); 
echo $result; 

我不知道它是否可行,但我从来没有遇到任何问题,这就是我编写代码的方式。

答案 2 :(得分:0)

尝试更改此行:

$query = "SELECT introtext FROM #__content WHERE title=\"$title\"";

为此:

$query = $db->getQuery( tru );
$query->select( 'introtext' );
$query->from( '#__content' );
$query->where( 'title=' . $db->Quote( $title );

我希望它有所帮助!

答案 3 :(得分:0)

我有这个工作:

<?php
$servername = "";
$username = "";
$password = "";
$dbname = "";

$keyvalue='101';

$conn = new mysqli($servername, $username, $password, $dbname);
$sql = "SELECT * FROM mytable WHERE keyfield='".$keyvalue."'";
$result = $conn->query($sql);

if($result && $row = $result->fetch_assoc()) {
  $fsql='DESCRIBE mytable';
  $fresult = $conn->query($fsql);
  if($fresult){
    while($frow = $fresult->fetch_assoc()) {
      $fieldname=$frow['Field'];
      echo($fieldname . ' = ' . $row[$fieldname] . '<br><br>');
     }
  }
}else echo("Failed: " . $sql);

?>