使用 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 查询字符串包含

检查数组中的所有值是不是都存在于数据库列中

检查字符串是不是只包含 PHP 中的 URL

我可以使用 MySQL 工作台替换 Mysql 中名为“key”的列中的字符串吗?

检查 Pandas DataFrame 列中的字符串是不是在字符串列表中

如何检查和删除一列中的字符串是否与R中另一列中的字符串匹配