通过PHP文件连接SQL DB的最佳方法?

时间:2013-05-03 18:14:33

标签: php sql

关于SQL语句,我们使用的旧SQL语句很容易在我正在为此工作的公司注入SQL(他们都是没有很多网络经验的计算机程序员)而我正试图让他们和我自己转向使用准备好的陈述。我已经阅读了很多关于它的内容,但它仍然有点不清楚。

例如,我们使用include(/mnt/configdb.php)然后使用db_connect();在我们的PHP文件中使用SQL(而不是SQLi)通过ini文件连接到每个SQL DB。我想使用更好的方法/语句mysqli_connect(),当我们需要更改服务器和更新SQL信息时(如果服务器移动),它将是灵活的。什么最好的想法? mysqli_connect()vs mysql_connect或使用函数调用来连接到服务器上的ini文件,就像我已经在做的那样?

例如,我想设置它以便我创建一个connect.php文件,并且它为我需要访问的每个模式有多个数据库连接,然后我只需要在必要的PHP中包含该文件和sqli语句将所有变量发送到需要连接的SQL DB的文件。什么是最好的方法,或者我如何转换我已经(下面)并将其转换为sqli和准备好的语句?我应该使用SQLi吗?或者只是坚持使用SQL?

服务器上的

configdb:

function db_config_cables()
{
//Parse and store the db ini file, this will return an associative array
global $dbhost,  $dbuser,  $dbpass,  $dbname;
//Point to global ini file
$config_info = parse_ini_file('config.ini', true);
//Call specific db
$dbhost = $config_info['tablename_here']['db_host'];
$dbuser = $config_info['tablename_here']['db_user'];
$dbpass = $config_info['tablename_here']['db_pass'];
$dbname = $config_info['tablename_here']['db_name'];
}

服务器上的accessdb文件:

function db_connect()
{
global $dblink, $dbhost,  $dbuser,  $dbpass,  $dbname;
$dblink = @mysql_connect($dbhost,  $dbuser,  $dbpass) or die ('DB ERROR - Could not connect: '.mysql_error());
@mysql_select_db($dbname) or die ('DB Error - Could not select: '.mysql_error());
}
function close_db()
{
global $dblink;
@mysql_close($dblink) or die ('DB ERROR - Could not close: '.mysql_error());
}

用于将数据发布到SQL数据库的PHP文件:

require("/mnt/library/configdb.php");        
require("/mnt/library/accessdb.php");

//Connect to SQL DB
db_config_cables();
db_connect();

$unsafe_variable = $_POST['unsafe_variable'];

mysql_query("INSERT INTO tablename (column_name,...) VALUES('$unsafe_variable',...)")
/* close connection */
close_db();

2 个答案:

答案 0 :(得分:2)

首先,我建议去PDO,而不是mysqli。

其次,不要只是将vlnerable代码挂在那里..在mysql_escape_string中包装不安全的变量真的很容易

第三,我强烈建议使用模型映射器抽象而不是直接的sql语句。这将节省您首先编写95%的查询。此外,您可以编写代码生成器,以便从数据库中为您生成模型/映射器代码。这可能听起来很难,但实际上它非常容易。

答案 1 :(得分:0)

首先,我不明白为什么你的担忧是如此微不足道的事情,而你的疑问仍然存在危险。

接下来,我强​​烈建议PDO而不是mysqli。

现在回答你的问题 我根本没有看到太多问题。

您当前的设置已经灵活。移动到新服务器时,只需更改/mnt/configdb.php中的数据库凭据即可。

那么,我做了什么:

相同的/mnt/configdb.php文件,其中包含凭据和实际连接代码(因为我认为没有必要具有独特的连接功能。如果您要包含凭据 - 您也将连接)。然后在我需要数据库连接的地方include_once()

require("/mnt/library/configdb.php");        
$stm = $pdo->prepare("INSERT INTO tablename (column_name,...) VALUES(?,...)");
$srm->execute(array($_POST['unsafe_variable']));

就是这样。