У меня есть база данных, в которой есть такие столбцы, как MyPrice, MyStock и т. Д. И по несколько рядов для каждого продукта - яблоко, персик и т. Д.

Я пытаюсь получить данные о цене / состоянии запасов нескольких товаров, используя следующий код, но получаю такие ошибки, как:

Примечание: неопределенная переменная: sql в строке 11

Предупреждение: mysqli :: query (): пустой запрос в строке 11

Примечание: неопределенная переменная: цены в строке 45

Примечание: попытка получить свойство не-объекта в строке 45

$dbhost =   'zzz';
$dbuser =   'zzz'; 
$dbpwd  =   'zzz'; 
$dbname =   'zzz';

$conn = new mysqli( $dbhost, $dbuser, $dbpwd, $dbname );                
$res = $conn->query( $sql );

$item1 = "apple";
$item2 = "peach";

$items=array( $item1, $item2 );
$sql='select * from products where `Name` in ("'.implode('","',$items).'");'; //line 11

if( $res ){

    $i=0;/* counter for dynamic variables */
    $prices=new stdClass;

    while( $rs=$res->fetch_object() ){
        $i++;

        /* Populate an object with details for the product */
        $prices->{ strtolower( $rs->name ) }=(object)array( 'price'=>$rs->MyPrice, 'description'=>$rs->MyDescription, 'stock'=>$rs->MyStock );

    }
}   
?>  

echo 'Apple:'.$prices->apple->price . '
'; //line 45 echo 'Peach:'.$prices->peach->stock . '
';

Что вызывает проблемы?

rockyraw

Ответов: 4

Ответы (4)

Я отладил ваш код в соответствии с вашими ошибками. В любом случае, сообщения должны привести вас к решению самостоятельно, особенно если они максимально ясны и очевидны. Если ваш код всегда будет отлаживать кто-то другой, вы ничему не научитесь.

 
$res = $conn->query( $sql );

if ($res) {
    $prices=new stdClass();
    $i=0; /* counter for dynamic variables */
    while( $rs=$res->fetch_object() ){
        $i++;

        /* Populate an object with details for the product */
        $prices->{ strtolower( $rs->name ) }=(object)array( 'price'=>$rs->MyPrice, 'description'=>$rs->MyDescription, 'stock'=>$rs->MyStock );

    }
    // here's 3rd and 4th error:
    // Notice: Undefined variable: prices on line 45
    // only output if you got values, so put the output into if-condition
    echo 'Apple:'.$prices->apple->price . '
'; echo 'Peach:'.$prices->peach->stock . '
'; } else { // database didn't return anything, so tell the user or something with that information. echo 'no data found or an error occured
'; } ?>

Переместить $ res = $ conn-> query ($ sql); На строку 12

Также убрать конец ?> И поместите в конец файла

Вот начало

$dbhost =   'zzz';
$dbuser =   'zzz'; 
$dbpwd  =   'zzz'; 
$dbname =   'zzz';

$conn = new mysqli( $dbhost, $dbuser, $dbpwd, $dbname );                

$item1 = "apple";
$item2 = "peach";

$items=array( $item1, $item2 );
$item_text = implode('","',$items);
$sql='select * from products where `Name` in ("'.$item_text.'");'; //line 11

$res = $conn->query( $sql );

if( $res ){

    $i=0;/* counter for dynamic variables */
    $prices=new stdClass;

    while( $rs=$res->fetch_object() ){
        $i++;

        /* Populate an object with details for the product */
        $prices->{ strtolower( $rs->name ) }=(object)array( 'price'=>$rs->MyPrice, 'description'=>$rs->MyDescription, 'stock'=>$rs->MyStock );

    }
}   


echo 'Apple:'.$prices->apple->price . '
'; //line 45 echo 'Peach:'.$prices->peach->stock . '
'; ?>

Это ваш первый преступник:

$sql='select * from products where `Name` in ("'.implode('","',$items).'");';

вам следует взорвать $ items перед тем, как пытаться объединить его в оператор sql.

Примерно так:

$item_text = implode('","',$items);
$sql='select * from products where `Name` in ("'.$item_text.'");';

Честно говоря, этот код немного запутанный. Вы должны использовать либо PDO, либо mysql, но не оба, и очистить это.

2022 WebDevInsider