2016-09-04 3 views
0

Это мой кодПосле блокировки таблицы, я получаю предупреждение

 $ar = ($_POST['ar']); 
     $query = "lock table stock write"; 
     $res = mysqli_query ($db, $query); 

     /*******Count******/ 
     $query = "SELECT SUM(quantita_vendita) AS somma FROM stock"; 
     $res = mysqli_query ($db, $query); 
     $row = mysqli_fetch_array($res); 
     $somma = $row['somma']; 

      if($ar<=$somma){ 
       $query = "SELECT * FROM user, info WHERE info.id_user = user.id and user.email = '{$_SESSION['email']}'"; 
       $res = mysqli_query ($db, $query); 

         if(mysqli_num_rows($res) > 0) { 
           $row = mysqli_fetch_assoc($res); 
           $azioni = $row['azioni']; 
           $denaro = $row['denaro']; 
           $id = $row['id']; 
           mysqli_free_result($res); 
         } 

Если вы не вставить замок, он работает. Вместо когда я вставить замок, у меня есть предупреждение (mysqli_num_rows() ожидает параметр 1, чтобы быть mysqli_result, булево приведены в ..) для if(mysqli_num_rows($res) > 0)

ответ

2

При использовании блокировки таблицы, вы должны заблокировать все таблицы, которые будут использоваться в любом запросе на этой сессии (или разблокировать их снова), см LOCK TABLES and UNLOCK TABLES Syntax

Сессия, требующая блокировок, должна получить все блокировки, которые ей нужны, в одной инструкции LOCK TABLES. Хотя блокировки, полученные таким образом, удерживаются, сеанс может иметь доступ только к заблокированным таблицам. Например, в следующей последовательности операторов, возникает ошибка в попытке доступа t2, поскольку он не был заперт в LOCK TABLES заявление:

mysql> LOCK TABLES t1 READ; 
mysql> SELECT COUNT(*) FROM t1; 
+----------+ 
| COUNT(*) | 
+----------+ 
|  3 | 
+----------+ 
mysql> SELECT COUNT(*) FROM t2; 
ERROR 1100 (HY000): Table 't2' was not locked with LOCK TABLES 

Так что в вашем случае запроса с использованием таблицы user и info не удалось. Чтобы решить это, используйте, например,

lock tables stock write, user write, info write; 

Вы получили сообщения об ошибке, поскольку запрос не удался, и, таким образом, $res ложна и не mysqli_result -объекта, и поэтому mysqli_num_rows($res) не работает. Вы всегда должны проверить, не завершился ли запрос до использования результата, например. использование

if ($res = mysqli_query($db, $query)) { 
    if (mysqli_num_rows($res) > 0) {... } 
} else { 
    printf("Error: %s\n", mysqli_error($db)); 
} 
+0

решил, спасибо !!! – Peppifg

0

Согласно ручной http://php.net/manual/en/mysqli.query.php

mysqli_query Возвращает FALSE при сбое. Для успешных запросов SELECT, SHOW, DESCRIBE или ВОПРОСЫ EXPLAIN mysqli_query() вернет объект mysqli_result. Для других успешных запросов mysqli_query() вернет TRUE.

Таким образом, вместо if(mysqli_num_rows($res) > 0) вы должны использовать if ($res)

+0

Я пробовал, но это не дает мне $ denaro – Peppifg

+0

Это означает, что $ res является ложным и ваш запрос не работает. Попробуйте найти ошибку с mysqli_errno @Peppifg –

+0

Я попробовал запрос непосредственно на db, а запрос работает – Peppifg

Смежные вопросы