这是我的代码
$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,boolean在...中给出)if(mysqli_num_rows($res) > 0)
答案 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
为false而不是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));
}
答案 1 :(得分: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)