使用 PHP 检查 MySQL 列中的“字符串”
Posted
技术标签:
【中文标题】使用 PHP 检查 MySQL 列中的“字符串”【英文标题】:Check for 'string' in a MySQL column using PHP 【发布时间】:2015-10-24 07:27:20 【问题描述】:所以基本上我想检查mysql database
表以查看某个列中是否存在某个数字或字符串(使用php)。
原因是添加到我的表中的每个“成员”都被赋予了一个唯一的、随机的 9 位数字,介于 100000000 和 999999999 之间。但是,我需要确保 PHP 代码不会生成 ID过去已经给了其他一些成员。如果发现生成的ID已经存在,就会重新生成该编号,直到得到一个之前没有被使用过的编号。
现在我做了一些研究,发现了与此类似的问题,但似乎没有一个使用 PHP 来回答这个特定问题。有人说要使用 INSTR(参见第二个解决方案:MySQL query String contains),但我不太确定如何将它实现到我正在尝试做的事情中(它返回所有行(假设)其中出现“字符串”列,但这无济于事。如果它发生了多少次,那么我们将走在正确的轨道上)。 如果这不可能或很难做到,那么我也可以读取我的特定列中的所有数据(请参阅:How get all values in a column using PHP?),然后以某种方式执行常规 PHP 函数来搜索我生成的 ID……如果它返回 false 然后我们不必重新生成。
所以问题是:关于某个 MySQL 表列中是否存在“字符串”(或数字)(使用 PHP),我如何执行返回 true 或 false 的排序函数? 我还在使用 MySQLi、过程语法……我是 MySQL 和 PHP 的初学者。
提前致谢!
【问题讨论】:
【参考方案1】:“我如何执行一个返回真或假的排序函数,以判断某个 MySQL 表列中是否存在‘字符串’(或数字)”:
$query = "SELECT count(*) AS num_found
FROM myTable
WHERE columnName = ?"
$stmt= $conn->prepare($query);
$stmt->execute(array($value));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
echo $row['num_found'];
使用自动增量确实更容易。
编辑:不清楚“如果某个列中存在某个数字或字符串”是指该列的整个值,还是只需要成为该列文本的一部分。如果后者使用带通配符的 LIKE %
【讨论】:
【参考方案2】:我不会那样做,想象一下(想象一下)你有 99999999 个客户,你的函数将被重复多达 999999999 次。这会杀死你的应用程序。相反,创建一个
autoincrement int(10) unique
数据库中的字段,让它从 100000000 开始,它会自动将数字加一。这样,mysql 可以确保无论发生什么情况,这个数字始终是唯一的,并且您不需要对您的应用程序有潜在危险的函数。
【讨论】:
感谢您的回复!不幸的是,ID 应该是密码,因此自动增量会使(潜在的)黑客很容易找出模式。至于rand()
附带的限制,我可以使用验证码来消除垃圾邮件并扩展随机数生成器的搜索字段。我真的需要一种简单的方法来确保rand()
没有生成数据库中已经存在的数字(在相应的列下)。
好的,如果是密码,每个纯文本字段都必须被认为是不安全的,应该避免使用。您将获得几乎所有唯一的密码哈希值,因此这可能是上述更好的替代方案。 @WilliamF
啊,确实。我不知道password_hash()
存在,但经过一些研究和测试,看来我会走传统的“用户输入密码”路线,然后用password_hash()
保护它。非常感谢您的帮助……这不是我来这里寻找的,但这是我最终要使用的。就唯一 ID 而言,我认为autoincrement
也是最佳途径。 @迈克尔以上是关于使用 PHP 检查 MySQL 列中的“字符串”的主要内容,如果未能解决你的问题,请参考以下文章
我可以使用 MySQL 工作台替换 Mysql 中名为“key”的列中的字符串吗?