也许是一个愚蠢的问题,但只是好奇。无法在搜索中找到任何内容。
所以我知道DB_PREFIX用于区分数据库中的不同表,这些表可能来自不同的"源" as pointed out here.
我正在使用DB_PREFIX,它在config.php中被声明为常量 随着我继续学习PHP的过程,这是我第一次使用DB_PREFIX(修改别人的脚本)
所以我只是好奇,请考虑以下简单陈述。
$sql = "SELECT gameID from ". DB_PREFIX . "schedule WHERE weekNum = :weekNum AND homeID = :homeID";
$stmnt = $db->prepare($sql);
$stmnt->bindValue(':weekNum', $week);
$stmnt->bindValue(':homeID', $teamName );
$stmnt->execute();
if ($stmnt->rowCount() > 0) {
$IDs = $stmnt->fetchAll();
foreach ($IDs as $ID){
$gameID = $ID['gameID'];
}
//echo $gameID;
return $gameID;
}
else {
die('Error getting game id: ');
}
的config.php
define('DB_PREFIX', 'bru_');
答案 0 :(得分:2)
在所有应用程序表中都有自定义前缀可以用于两个目的:
与其他应用共享同一个数据库。这只是真正廉价的托管服务才有意义 - 而且在2017年意味着真正的低成本服务。
拥有多租户应用程序(单个应用程序将其数据拆分为同一个表集的多个副本)。这类应用往往是维护的噩梦。
它不可能添加任何额外的安全性,因为它没有尝试。它根本不是安全功能。事实上,从安全的角度来看,可以说它实际上可以增加风险。如果您与其他任意应用程序共享存储,您很可能也会在完整数据库上使用相同的读写权限共享同一个MySQL用户。在这种情况下,另一个应用程序可以有意或无意地轻易消除您的表格。
关于良好实践部分......这总是相当主观的。我的个人意见是,它提供了一个可疑的好处(共享一个数据库就像分享洗澡水,只有你生活在沙漠中才有意义),这使得编写SQL代码更加烦人。例如,您不能再在PHP代码和MySQL客户端之间复制和粘贴,如果您使用识别PHP字符串中的SQL的IDE,您将无法获得正确的代码智能。