YC Kwan Ответов: 2

Mysqli_fetch_array() ожидает параметр 1, чтобы быть mysqli_result, нуль дается в


<?php

$link = mysqli_connect("fdb25.awardspace.net","user","yc1234","user");
echo mysqli_connect_error();



if(isset($_GET['posts'])){
	$id=$_GET['posts'];
        $query="SELECT * FROM `landlord` WHERE ID='$id'";
        $query_run=mysqli_query($link,$query);
}


?>




	<table width='1500' border = '1'>
  <thead>
    <tr>
      <th>Remarks</th>
      <th>Image</th>
     
    </tr>
  </thead>
  <tbody>
  <?php  while($row=mysqli_fetch_array($query_run)) { ?>

    <tr>
      <td> <?php echo $row['Remarks'];  ?></td>
  
      <td>

      		<?php  $image_name="SELECT * FROM `landlord` as p join details as d 
      					on p.id =d.proid WHERE d.proid =".$row['id'];
      					$read1=$link->query($image_name);

      					foreach ($read1 as $value) { ?>

      						<img src="upload/<?php echo $value['images']; ?>" />
      						
      					<?php  } ?>
      					</td>
    </tr>
<?php   } ?>
  </tbody>
</table> 


Что я уже пробовал:

Ошибка этого проекта заключается в следующем
mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in

на
while($row=mysqli_fetch_array($query_run))

могу я узнать, как ее решить ? Спасибо

2 Ответов

Рейтинг:
0

OriginalGriff

Не делай этого так! Никогда не объединяйте строки для построения команды SQL. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого всегда используйте параметризованные запросы.

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:

SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?

Скорее всего, к тому времени, когда вы закончите исправлять это во всем вашем приложении, ваша другая проблема исчезнет одновременно ...