在不使用CMS或繁重框架的情况下对用户进行身份验证的最佳库/方法有哪些?
响应应该包括您认为应该被视为涉及用户身份验证的新PHP开发标准的任何建议.
假设我在同一台物理服务器上有两个独立的数据库,X和Y.
我的所有查询目前都用完X.
我发现我在YI中有一张桌子想要X可用于JOINS.
所以...现在我在X和Y中保留了X和Y所需的一个表的副本,但Y中的数据不断变化,因此副本很快就会过时.对于这个应用程序并不重要,但对于另一个我正在设计的现在,这是不会做的.
X现在只需要对Y中的表进行读访问.
是否有一种有效的方法来跨两个数据库进行连接?
我更喜欢一个mysql解决方案,而不是在php中打开多个数据库连接.
谢谢.
编辑:那么这些线路变成了什么?:
$conn = mysql_connect('localhost','username','password');
@mysql_select_db('database_name',$conn)
Run Code Online (Sandbox Code Playgroud)
是的..这是一个旧的应用程序,因此mysql而不是mysqli.假设我可以转换它.
编辑2:所以我没有指定database_name.table_name,只是指定table_name我得到任何选择,我指定database.table_name我得到我要求的...对吗?是的.作品.
编辑方式3:跨数据库连接与同一数据库中的连接相比,是否有重大的性能损失?不.看起来同样快.
谢谢大家的回复.
我想生成一个简短的唯一ID,而不必检查冲突.
我目前做这样的事情,但我目前生成的ID是随机的,并且在循环中检查冲突是令人讨厌的,并且如果记录数量显着增加将会变得昂贵.
通常担心碰撞不是问题,但我想要生成的唯一ID是一个短的唯一字符串5-8个字符,字母数字,就像tinyurl一样.
编辑:我想从5个字符开始,如果我达到6000万条目,那么去6 ...等等.
为此,我想我可以使用对用户隐藏的auto_increment值,而是用一个MD5或其他方法来呈现它们以从中生成唯一的字符串.
生成的字符串看起来不应该是线性的,所以简单地将auto_incremented ID转换为base 36[0-9A-Z]有点过于简单了,但是这样的函数就是我要用的东西.
编辑:安全性不是问题,因为这不会用于保护信息.它只是更长字符串的快捷方式.谢谢.
感谢您的建议,抱歉延误.牙医..
从历史上看,我一直都在使用
mysql_real_escape_string()
Run Code Online (Sandbox Code Playgroud)
对于最终触及数据库的用户派生的所有输入.
现在我已经完全转换为MySQLi并且我正在使用带有绑定参数的准备查询,我是否有效地消除了SQL注入攻击的可能性?
我说我不再需要了
mysql_real_escape_string()?
Run Code Online (Sandbox Code Playgroud)
这是我的理解和我的项目的基础:http: //sourceforge.net/projects/mysqldoneright/files/Base/MysqlDoneRight-0.23.tar.gz/download
这不是我想弄错的事情,虽然现在我已经发布它,它也可能影响其他人.
现在,所有用户提供的输入都将以bind_parms结尾.
准备阶段提供的查询是静态的.
简化表结构:
CREATE TABLE IF NOT EXISTS `hpa` (
`id` bigint(15) NOT NULL auto_increment,
`core` varchar(50) NOT NULL,
`hostname` varchar(50) NOT NULL,
`status` varchar(255) NOT NULL,
`entered_date` int(11) NOT NULL,
`active_date` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `hostname` (`hostname`),
KEY `status` (`status`),
KEY `entered_date` (`entered_date`),
KEY `core` (`core`),
KEY `active_date` (`active_date`)
)
Run Code Online (Sandbox Code Playgroud)
为此,我有以下SQL查询,它简单地总计了具有已定义状态的所有记录.
SELECT core,COUNT(hostname) AS hostname_count, MAX(active_date) AS last_active
FROM `hpa`
WHERE
status != 'OK' AND status != 'Repaired'
GROUP BY core
ORDER BY core
Run Code Online (Sandbox Code Playgroud)
此查询已简化为将INNER JOINS移除到不相关的数据和不应影响问题的额外列.
MAX(active_date)对于特定日期的所有记录都相同,应始终选择最近一天,或允许从NOW()偏移.(这是一个UNIXTIME字段)
我想要两个计数:(状态!='确定'和状态!='修复') …
在我的一台开发机器上,我有无限的撤销,我可以抓住你,并在我打开文件时一直回到.
另一方面,按下你在我做的最后两个更改之间切换,不再.
我有管理员访问权限的第一台开发机器,vim安装程序可以免费使用.第二个我没有和vim必须安装在正常的OS路径之外,并且必须使用'Sendto'启动vim.也许这是相关的,我错过了一些rc命令.还注意到我必须运行'syn on'才能在该框上突出显示.vimrc也是空白所以现在我确定它与它有关.
从其他线程我不相信这与持久性撤销功能有关,而只是一个.swp或〜问题(无论这些文件用于什么......)
截止日期已经促使这可能是一个简单的问题.我该如何解决这个问题?
我的应用程序内部使用通过sys_guid()生成的RAW(16)guids.
最近我开始将我获得guid的Active Directory用户关联起来,格式为:00000000-0000-0000-0000-00000000000
以下两个函数是否正确执行此转换?
找到以下网站:
create or replace
FUNCTION RAWTOGUID
( RawData IN RAW
) RETURN VARCHAR AS
BEGIN
declare HexData varchar(32) := rawtohex(RawData);
begin
return
substr(HexData, 7, 2)
|| substr(HexData, 5, 2)
|| substr(HexData, 3, 2)
|| substr(HexData, 1, 2)
|| '-'
|| substr(HexData, 11, 2)
|| substr(HexData, 9, 2)
|| '-'
|| substr(HexData, 15, 2)
|| substr(HexData, 13, 2)
|| '-'
|| substr(HexData, 17, 4)
|| '-'
|| substr(HexData, 21, 12);
end;
END RAWTOGUID;
Run Code Online (Sandbox Code Playgroud)
添加以下站点:
http://dbaspot.com/oracle-server/69226-guid-char-conversion-function.html
想出了这个功能来反过来: …
在我的模块的BEGIN部分中有以下内容:
use sigtrap qw(handler shutdown normal-signals);
use sigtrap qw(die untrapped normal-signals stack-trace any error-signals);
Run Code Online (Sandbox Code Playgroud)
但是当sigtrap捕获INT等时,我在关闭子中获得的内容只包含陷阱而不是对象句柄.没有$ self.
sub shutdown {
my $sig = shift || 'Nothing';
print "Got signal: $sig\n";
exit;
}
Run Code Online (Sandbox Code Playgroud)
简单地回来
Got signal: INT
Run Code Online (Sandbox Code Playgroud)
我的DESTROY在此之后正确调用并且可以访问对象句柄,但由于我在关机时无法访问句柄,因此我无法存储它并且不知道信号是什么.
我需要知道我得到了什么陷阱,所以我的DESTROY方法可以记录导致关闭的原因.
也许sigtrap不是这里的最佳选择.意见欢迎.
我历来使用单片方法来编写PHP代码.
也就是说,我写了一个index.php,平均大小为70k-250k,并使用
mod_rewrite
Run Code Online (Sandbox Code Playgroud)
转过剩下的
REQUEST_URI
Run Code Online (Sandbox Code Playgroud)
传入index.php的参数来控制发生的事情.
另一种方法是编写许多小的PHP脚本,每个脚本专门用于特定目的.我认为我的一些更活跃的ajax脚本可能会从中受益.
让我参与这个思考过程的一件事是我不知道如何使用包含,特别是条件包含会影响操作码缓存的性能.
如果可能的话,由于我对此的偏执,我一般完全避免包含,但这会导致重复代码或保持整体.
因为我无论如何都在使用mod_rewrite,所以在两种方法之间进行转换应该很简单.
我期待你的评论.
编辑:我的一个目标应用程序目前每秒处理80-100页点击(我得到了一些不错的硬件).其中大多数是ajax请求.一切正常,而且很快,但我已经发展成为一个没有批评的PHP程序员,需要它.