Unique Profile Slug with PHP and PDO(具有PHP和PDO的独特配置文件插件)
本文介绍了具有PHP和PDO的独特配置文件插件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用一个类生成要插入的字符串名称配置文件,然后使用SQL命令告诉我要在INSERT命令中使用的唯一值是什么,问题是该命令不能正常工作,有时可能会返回已经存在的值.
这就是我用来生成slug的类:(Composer需要channel aveer/slug)
这是示例代码:
use ChannaveerSlugSlug;
$string = "john doe";
$slug = Slug::create($string);
$profile_count_stmt = $pdo->prepare("
SELECT
COUNT(`id`) slug_count
FROM
`advogados_e_escritorios`
WHERE
`slug_perfil` LIKE :slug
");
$profile_count_stmt->execute([
":slug" => "%".$slug."%"
]);
$profile_count = $profile_count_stmt->fetchObject();
if ($profile_count && $profile_count->slug_count > 0) {
$profile_increment = $profile_count->slug_count + 1;
$slug = $slug . '-' . $profile_increment;
}
echo 'Your unique slug: '. $slug;
// Your unique slug: john-doe-5
这是脚本运行时的表内容:
您知道如何改进SELECT命令以防止它从数据库返回现有的插件吗?
推荐答案
您应该检查数据库中是否存在该辅助程序。如果它已经存在,则可以附加一些随机字符串,如下所示
$slug = Slug::create($string);
$slugExists = "DB query to check if the slug exists in your database then you may return the count of rows";
//If the count of rows is more than 0, then add some random string
if($slugExists) {
/** NOTE: you can use primary key - id to append after the slug, but that has to be done after you create the user record. This will help you to achieve the concurrency problem as @YourCommenSense was stating. */
$slug = $slug.time(); //time() function will return time in number of seconds
}
//DB query to insert into database
我的博客文章(StackCoder)也遵循了同样的原则。即使是LinkedIn也遵循同样的方式。
以下是LinkedIn URL的屏幕截图
这篇关于具有PHP和PDO的独特配置文件插件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:具有PHP和PDO的独特配置文件插件
基础教程推荐
猜你喜欢
- SQL Server 2016更改对象所有者 2022-01-01
- 在 VB.NET 中更新 SQL Server DateTime 列 2021-01-01
- ERROR 2006 (HY000): MySQL 服务器已经消失 2021-01-01
- SQL Server:只有 GROUP BY 中的最后一个条目 2021-01-01
- 将数据从 MS SQL 迁移到 PostgreSQL? 2022-01-01
- 如何在 SQL Server 的嵌套过程中处理事务? 2021-01-01
- 无法在 ubuntu 中启动 mysql 服务器 2021-01-01
- 使用pyodbc“不安全"的Python多处理和数据库访问? 2022-01-01
- Sql Server 字符串到日期的转换 2021-01-01
- SQL Server 中单行 MERGE/upsert 的语法 2021-01-01