php - 以下sql查询中的错误处理

标签 php mysql

摆弄表格 here

我将以下 sql 与 fiddle 中的表一起使用,以检查用户是否已达到借用限额。这里的问题是,如果提供了无效的元素编号,它会返回 NULL,如果用户没有借过任何元素,它会返回 NULL。这样,我无法判断是否提供了无效的项目编号,或者用户是否实际上没有借过任何书籍。检查是否提供了无效的项目编号或成员(member)实际上没有借过该类别下的任何东西的好方法是什么?

set @mId = 3 //Has not borrowed anything till now.
set @id = 21; //This item does not appear in the collection_db table and is therefore invalid.
set @country = 'US';

SELECT col1.id, col1.holder, col2.borrowMax maxLimit, count(lend.borrowedId) as `count`
FROM collection_db col1
  INNER JOIN collection_db col2
  ON col1.holder = col2.id
    INNER JOIN lendings lend
    ON col1.holder = lend.holder and col1.country = lend.country
WHERE col1.id = @id and col1.country = @country
AND col2.category = 10
AND lend.memId = @mId and lend.country = @country

最佳答案

我可以用一个查询得到的最远的是(必须取出 php 和“country”vars 才能使 fiddle 工作):

SELECT col1.id, col1.holder, col2.borrowMax maxLimit, count(lend.borrowedId) as `count`
,case when valid1.id is not null then 'true' else 'false' end as validId
FROM collection_db col1
  INNER JOIN collection_db col2
  ON col1.holder = col2.id
    INNER JOIN lendings lend
    ON col1.holder = lend.holder,(
        Select Distinct a.id From collection_db a
        Where a.id = 4) valid1
WHERE col1.id = 4
AND col2.category = 10
AND lend.memId = 1

您可能必须执行准备查询以检查有效的 memId:

$theQuery = "SELECT DISTINCT memId FROM lendings WHERE memId = 1"

然后在这里测试一下:

if (mysql_num_rows(mysql_query($theQuery)) <= 0) { /* No memId exists */ }
else { /* Do big query here */ }

关于php - 以下sql查询中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16730557/

相关文章:

php - 从各种表中选择,并带有索引列表

mysql 从 $_GET 从另一个表中选择表

mysql - 如何在node js中使用mysql FIND_IN_SET?

php - 如何在 Wordpress 数据库的 mysql 中将行值转换为列标题

mysql - 任何优化此查询的建议

php - 在非对象上调用成员函数 bind_param()

php - 在 Laravel 中解密在 MySQL 中使用 AES_ENCRYPT 加密的数据

php - Paypal IPN Sandbox - 交易完成前接收状态已完成

javascript - anchor 标签从一个页面到另一个页面的平滑滚动目标问题

php - 如何防止 PHP 中的 SQL 注入(inject)?