2016-01-06 1 views
-2
$sql = "SELECT * FROM product_suplier LEFT JOIN furnizor ON furnizor.id_furnizor=product_suplier.id_furnizor WHERE product_suplier.id_product=$_GET[id])"; 
     $result = $conn->query($sql); 
     while($row_furnizor = $result->fetch_assoc()) { 
     echo $row_furnizor['name'].' - adresa: '.$row_furnizor['adresa']; } 

PHPMYADMIN результат:MySQL LEFT JOIN - PHP вызов функции члена FETCH_ASSOC() на не-объект

nr_id ... | ... id_product ... | ... id_suplier. .. | ... id_suplier ... | ... name ... | ... адрес

2 ......... | ... 2 ........ .......... | ... 1 ................... | .... 1 .......... ..... ... ... Кальвин. ... Амстердам
3 ......... | ... 2 ................. . | ... 2 .................. | ... 2 ............... | ... Уход. .. | ... Лондон

Ошибка: Критическая ошибка: Вызов функции члена FETCH_ASSOC() на не-объект

+0

Ваш запрос не работает по какой-либо причине. Проверьте имена столбцов (например, вы называете 'поставщик' вместо' suplier', например.) Он сбивает меня с места в карьер, что '$ _GET [id]' неверно, так как ему нужны кавычки, окружающие идентификатор. Пожалуйста, добавьте проверку ошибок в SQL-запросы. –

+0

У вас есть ')' в конце вашей строки, а не в закрытии '' ' – RiggsFolly

ответ

0

обновление этой линии будет:

$sql = "SELECT * FROM product_suplier LEFT JOIN furnizor ON 
furnizor.id_furnizor=product_suplier.id_furnizor WHERE 
product_suplier.id_product=".mysqli_escape_string($_GET['id']); 

вы называете $_GET массив значений в некорректным способом, а также удалить ) и вас должен использовать функцию mysql_escape_string, когда вы получаете данные от пользователя, чтобы предотвратить SQL-инъекцию.

+0

не просто отправьте код, объясните это –

+0

@Dagon Я уже объясняю разницу между его кодом и моими обновлениями –

+0

. На самом деле проблема заключается в том,) 'id действителен, но опасная практика –

1

Основная проблема, возможно, заключалась в отсутствии кавычек вокруг имени переменной GET, хотя логических тестов не было, чтобы решить, обрабатывать ли набор записей. Вам также может быть проще назначить псевдоним таблицы при объединении таблиц, поскольку он упрощает чтение sql в IMO.

<?php 

    /* only proceed if there is an `id` ~ the $_GET variable required quotes */ 

    $id=isset($_GET['id']) && !empty($_GET['id']) ? strip_tags(trim($_GET['id'])): false; 

    if($id){ 

     /* prepare the sql (not prepared statement)*/ 
     $sql = "select * from 
      `product_suplier` p 
      left outer join `furnizor` f on f.`id_furnizor`=p.`id_furnizor` 
      where p.`id_product`='{$id}'"; 
     /* Assign a result to the query */ 
     $result = $conn->query($sql); 

     /* logical test on the query result - only proceed if it succeeded */ 
     if($result){ 

      /* Personal preference: using object notation rather than array */ 
      while($rs = $result->fetch_object()) { 
       echo $rs->name.' - adresa: '.$rs->adresa; 
      } 
     } 
    } 
?> 
+0

Просто небольшая точка: [пусто ()] (http://php.net/manual/en/function.empty.php) делает подразумеваемый 'isset()' и до тех пор, пока переменная не может корректно содержать NULL или FALSE, достаточно хороша сама по себе – RiggsFolly

+0

, я сделал не оценивайте этот факт, спасибо за подсказку – RamRaider