Jump to content

Proste zapytanie Db::getInstance()->getValue


Habakuk34

Recommended Posts

Mam taką małą zagwozdkę z pobraniem id_product w Prestashop 8.1
Otóż mam taki kod:
 

while(...){
....
echo $pn; //wyswietla wartość prawidłową - dany part number jest w bazie mysql (testowane na phpmyadmin - znajduje rekord)
$pID = Db::getInstance()->getValue('SELECT id_product FROM  ' . _DB_PREFIX_ . 'product WHERE reference = "'.pSQL($pn).'" '); 
echo $pID; // zwraca puste

}

gdy zastosuje próbnie kod bez zmiennej to działa poprawnie, oczywiscie zmienna musi być bo to chcę w pętli uruchomić

 

$pID = Db::getInstance()->getValue('SELECT id_product FROM  ' . _DB_PREFIX_ . 'product WHERE reference = "SYMBOL" ');
echo $pID; // wyświetla prawidłowe id_product

 

o co może tu chodzić ? jak usunę pSQL() to Presta 8.1 wywala błąd. We wcześniejszych wersjach tego nie było i nie miałem takiego problemu

Edited by Habakuk34 (see edit history)
Link to comment
Share on other sites

Zamiast podwójnych cudzysłowów użyj ukośnika odwrotnego \' lub `.

Zamiast podwójnych cudzysłowów użyj ukośnika odwrotnego \' lub `.
pSQL() wykonuje ucieczkę.

$pID = Db::getInstance()->getValue('SELECT p.id_product FROM  ' . _DB_PREFIX_ . 'product p WHERE p.reference = \''.pSQL($pn).'\'');

 

pSQL:

function pSQL($string, $htmlOK = false)
{
	static $db = false;
	if (!$db)
		$db = Db::getInstance();

	return $db->escape($string, $htmlOK);
}

 

bqSQL:

function bqSQL($string)
{
	return str_replace('`', '\`', pSQL($string));
}

 

$db->escape:

public function escape($string, $html_ok = false, $bq_sql = false)
    {
        if (!is_numeric($string)) {
            $string = $this->_escape($string);

            if (!$html_ok) {
                $string = strip_tags(Tools::nl2br($string));
            }

            if ($bq_sql === true) {
                $string = str_replace('`', '\`', $string);
            }
        }

        return $string;
    }

 

Edited by ps8modules (see edit history)
Link to comment
Share on other sites

Dzięuję za pomoc. Co prawda wskazówka tu akurat nie miała zastosowania ale naprowadziła mnie na prawidłowe rozwiązanie.
Zmienna $pn zawierała nie tylko SYMBOL ale również kod html <span>, przez co nie znajdowało w bazie produktu o wskazanym symbolu.

  • Like 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...