关于 SQL 语句,我们正在使用旧的 SQL 语句,在我工作的这家公司中,这些语句很容易被 SQL 注入(他们都是没有太多网络经验的计算机程序员),我正在努力让他们和我自己朝着使用准备好的语句。我已经阅读了很多关于它的内容,但仍然有点不清楚。
例如,我们使用的是 include(/mnt/configdb.php),然后是 db_connect();在我们的 PHP 文件中,通过使用 SQL(不是 SQLi)的 ini 文件连接到每个 SQL DB。我想使用更好的方法/语句,也许是 mysqli_connect(),当我们需要更改服务器和更新 SQL 信息(在服务器移动的情况下)时,它们会很灵活。知道什么最有效吗?mysqli_connect() 与 mysql_connect 或使用函数调用连接到服务器上的 ini 文件,就像我已经在做的那样?
例如,我想对其进行设置,以便创建一个 connect.php 文件,并且它为我需要访问的每个模式都有多个数据库连接,然后我只需将该文件和 sqli 语句包含在必要的 PHP 文件中,即将所有变量发送到它需要连接的 SQL DB。解决此问题的最佳方法是什么,或者如何转换我已经拥有的(如下)并将其转换为 sqli 和准备好的语句?我什至应该使用 SQLi 吗?或者只是坚持使用 SQL?
服务器上的配置数据库:
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();