首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何避免在PHP中重复类似的MySQL查询代码?

如何避免在PHP中重复类似的MySQL查询代码?
EN

Stack Overflow用户
提问于 2018-06-16 07:47:41
回答 1查看 177关注 0票数 0

为了避免在整个PHP中重复非常相似的update/insert MySQL查询代码,我创建了这两个函数。有更好的办法吗?..或者,这种方法是有效和安全的吗?这是一个低流量的应用程序。

代码语言:javascript
复制
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();
  };
};

谢谢你,马克

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-16 07:56:31

这不是写这样的代码的最佳实践,不管应用程序是不是低容量。每次调用函数时,您都会一次又一次地声明相同的pdo对象,这是非常低效的。你应该把代码抽象出来看看OOP的概念。例如,创建一次PDO对象,然后在连接到DB时返回它的一个实例。

代码语言:javascript
复制
funcUpdatePHPVariableInMySQL

最好使用一些类似switch语句的语句,例如:

代码语言:javascript
复制
switch (n) {
    case update:
update DB;
        break;
    case insert:
insert into DB;       
 break;
    case delete:
delete from DB;
        break;
    ...
    default:
 xyz;
}

上面的硬编码看起来太多了,无法满足应用程序的需要。这只是我的两个观点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50883879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档