У меня есть база данных с такими столбцами, как MyPrice, MyStock и т. Д. И несколько строк для каждого продукта – яблоко, персик и т. Д.
Я пытаюсь вывести данные о состоянии цены / запаса нескольких элементов, используя следующий код, но я получаю такие ошибки, как:
Notice: Undefined variable: sql on line 11
Warning: mysqli::query(): Empty query on line 11
Notice: Undefined variable: prices on line 45
Notice: Trying to get property of non-object on line 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 . '<br />'; //line 45 echo 'Peach:'.$prices->peach->stock . '<br />';
Что вызывает проблемы?
Я отлаживал ваш код в соответствии с вашими ошибками. Во всяком случае, messeges должны привести вас к решению самостоятельно, особенно если они будут такими же ясными и очевидными. Если вы всегда получаете код, отлаженный кем-то другим, вы ничего не узнаете.
<?php $dbhost = 'zzz'; $dbuser = 'zzz'; $dbpwd = 'zzz'; $dbname = 'zzz'; $conn = new mysqli( $dbhost, $dbuser, $dbpwd, $dbname ); $item1 = "apple"; $item2 = "peach"; $items=array( $item1, $item2 ); $sql='select * from products where `Name` in ("'.implode('","',$items).'");'; // here's the first two errors. // Notice: Undefined variable: sql on line 11 // Warning: mysqli::query(): Empty query on line 11 // You tried to query the db without defining $sql first (lines were mixed up) -> $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 . '<br />'; echo 'Peach:'.$prices->peach->stock . '<br />'; } else { // database didn't return anything, so tell the user or something with that information. echo 'no data found or an error occured<br />'; } ?>
Переместить $ res = $ conn-> query ($ sql); В строке 12
Также удалите конец?> И поместите в конец файла
Это ваш первый преступник:
$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 не оба, а очистить это.
Вот начало
$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 . '<br />'; //line 45 echo 'Peach:'.$prices->peach->stock . '<br />'; ?>