Php 锁好桌子后,我得到警告
这是我的密码Php 锁好桌子后,我得到警告,php,mysql,locking,Php,Mysql,Locking,这是我的密码 $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,
$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,布尔值在。。对于ifmysqli_num_行,根据手册$res>0
mysqli_查询失败时返回FALSE。要成功选择、显示、描述或
解释查询mysqli\u查询将返回mysqli\u结果对象。对于
其他成功的查询mysqli_query将返回TRUE
因此,根据手册,应该使用if$res,而不是ifmysqli_num_rows$res>0
mysqli_查询失败时返回FALSE。要成功选择、显示、描述或
解释查询mysqli\u查询将返回mysqli\u结果对象。对于
其他成功的查询mysqli_query将返回TRUE
因此,在使用表锁定时,不应使用ifmysqli_num_rows$res>0,而应使用if$res,您必须锁定将在该会话中的任何查询中使用的所有表或再次解锁它们,请参阅 需要锁的会话必须在单个LOCK TABLES语句中获取它所需的所有锁。当这样获得的锁被保持时,会话只能访问锁定的表。例如,在以下语句序列中,尝试访问t2时出错,因为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\u result-object,因此mysqli\u num\u rows$res不起作用。在使用结果之前,应始终检查查询是否失败,例如使用
if ($res = mysqli_query($db, $query)) {
if (mysqli_num_rows($res) > 0) {... }
} else {
printf("Error: %s\n", mysqli_error($db));
}
使用表锁定时,必须锁定该会话中任何查询中要使用的所有表,或者再次解锁它们,请参阅 需要锁的会话必须在单个LOCK TABLES语句中获取它所需的所有锁。当这样获得的锁被保持时,会话只能访问锁定的表。例如,在以下语句序列中,尝试访问t2时出错,因为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\u result-object,因此mysqli\u num\u rows$res不起作用。在使用结果之前,应始终检查查询是否失败,例如使用
if ($res = mysqli_query($db, $query)) {
if (mysqli_num_rows($res) > 0) {... }
} else {
printf("Error: %s\n", mysqli_error($db));
}
这意味着$res为false,您的查询失败。尝试查找mysqli_errno@PeppifgI的错误直接在数据库上尝试了查询,并且查询工作该查询不仅在锁定表stock之后工作,而且在锁定表之后在数据库中也工作。这意味着$res为false,您的查询失败。尝试查找mysqli_errno@PeppifgI的错误直接在数据库上尝试了该查询,该查询有效该查询不仅在锁定表库存后有效,而且在锁定表库存后在数据库中也有效