Joomla 1.7 DB Query не работает, когда запрос имеет амперсанд - PullRequest
0 голосов
/ 12 декабря 2011

Я схожу с ума по этому поводу. Я пробовал все до сих пор, в течение нескольких часов. Вот задача:

В переопределении модуля я использую этот код:

$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 переменных, которые заполняют $linktext в цикле foreach, все работают, кроме той, которая содержит строку, включая "&" ...

Я пробовал htmlentities и utf8_encode и различный вид (фактически все комбинации) символов "и" в запросе ... ничего не помогло.

Когда я использую следующий запрос sql в phpmyadmin, он работает:

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

Я действительно озадачен этим и сейчас очень устал и зол ... Любая помощь будет принята с благодарностью !!!

Ответы [ 4 ]

2 голосов
/ 12 декабря 2011

Иногда хороший длинный сон - лучшее, что вы можете сделать!

Я просто использовал strlen, чтобы проверить длину $linktext (которую я получаю из БД через цикл foreach) и обнаружил, что этодлиннее видимых символов.Это логично, потому что &, который возвращается как &.

Для того, чтобы использовать это $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-> select), как указано в других ответах

0 голосов
/ 20 октября 2017

У меня это работает:

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

?>
0 голосов
/ 12 декабря 2011

Попробуйте изменить эту строку:

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

Для этого:

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

Надеюсь, это помогло!

0 голосов
/ 12 декабря 2011

Вы пробовали:

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

Я не знаю, сработает ли это, но у меня никогда не было проблем, и вот как я пишу свой код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...