为了避免在我的PHP中重复非常类似的更新/插入MySQL查询代码部分,我创建了这两个函数。有更好的方法吗?或者这种方法是否有效且安全?这是一个低流量的应用程序。
funcConnectToDatabase("localhost","MyDatabase");
funcUpdatePHPVariableInMySQL( "TableName","RequiredColumnName","RequiredColumnValue","UpdateColumnName","UpdateColumnValue");
function funcConnectToDatabase($thisHost,$thisDatabaseName)
{
global $pdo, $username, $password;
require_once($_SERVER['DOCUMENT_ROOT'] . '/../sql.php'); //includes credentials from outside root
$pdo = new PDO("mysql:host=$thisHost;dbname=$thisDatabaseName;charset=gbk",$username,$password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
};
function funcUpdatePHPVariableInMySQL($thisTableName,$thisRequiredColumnName,$thisRequiredColumnValue,$thisUpdateColumnName,$thisUpdateColumnValue)
{
global $pdo;
$sqlquery = $pdo->prepare("SELECT * FROM $thisTableName WHERE $thisRequiredColumnName = :$thisRequiredColumnName");
$sqlquery->bindParam(":$thisRequiredColumnName",$thisRequiredColumnValue);
$sqlquery->execute();
$rows = $sqlquery->fetchAll(PDO::FETCH_ASSOC);
if (count($rows) > 0) {
$sqlquery = $pdo->prepare("UPDATE $thisTableName SET $thisUpdateColumnName='$thisUpdateColumnValue' WHERE $thisRequiredColumnName = :$thisRequiredColumnValue");
$sqlquery->bindParam(":$thisRequiredColumnValue",$thisRequiredColumnValue);
$sqlquery->execute();
}
else
{
$sqlquery = $pdo->prepare("INSERT INTO $thisTableName ($thisUpdateColumnName) VALUES (:$thisUpdateColumnValue)");
$sqlquery->bindParam(":$thisUpdateColumnValue",$thisUpdateColumnValue);
$sqlquery->execute();
};
};
谢谢Mark,
答案 0 :(得分:1)
无论应用程序是否为低容量,这都不是编写此类代码的最佳做法。每次调用函数时,您都会反复声明相同的pdo对象,这是无效的。您应该查看抽象代码以查看OOP概念。例如,创建一次PDO对象,然后在连接到DB时返回它的实例。
funcUpdatePHPVariableInMySQL
您最好使用类似switch语句的内容,例如:
switch (n) {
case update:
update DB;
break;
case insert:
insert into DB;
break;
case delete:
delete from DB;
break;
...
default:
xyz;
}
上面看起来太硬编码以适应应用程序的需要。那只是我的两分钱。