如上面的注释中所述,您应该分而治之,以使您的生活更轻松(尤其是当您在该大型函数中使用代码时编写代码)。确实很容易做到:

function file_put($number, $data) { $path = sprintf("C:/temp/wamp/www/file%d.txt", $number); file_put_contents($path, $data); } 例如,这只是替换许多重复的行,您只需要在其中放入一些(编号)文件即可。

但是您也可以使用更复杂的内容(例如数据库操作)来执行此操作。您可能希望将错误处理移到您的视线之外,并在需要时小心地连接到数据库,并以更灵活的方式来获取数据。可以通过将(已弃用的)mysql_*函数移至其自己的一两个类中来完成,以使它不被看到。这将使它的使用更加容易(我首先显示):

// Create your database object to use it later on: $config = array( 'server' => 'localhost', 'name' => 'root', 'password' => '', 'db' => 'test', ); $db = new MySql($config); 我称它为数据库类,MySql因为它代表了mysql连接,并且可以与旧的mysql扩展一起使用。您只需要将该数据库对象传递给问题中的函数即可。结合file_put功能,它看起来像这样:

function checkin(MySql $DB, $TechID, $ClientID, $SiteID) { $query = sprintf("SELECT Type FROM Log WHERE TechID = '%d' ORDER BY LogTime DESC LIMIT 1", $TechID); file_put(5, $query);

$result1 = $DB->query("SELECT COUNT(*) FROM Log");

$result2 = $DB->query($query);

foreach ($result1 as $row1) {

list($count) = $row1;

$data = "ClientID:$ClientID TechID:$TechID SiteID:$SiteID Count:$count"

file_put(3, $data);

foreach ($result2 as $row2) {

file_put(4, $data);

}

}

} 该checkin函数仍然接近大型(已经有12行代码),但是比您的第一个版本短得多,因为它委派了编写文件和访问数据库的工作。我希望这个示范有用。以下是完整的代码示例:

/** * MySql Exception */ class MySqlException extends RuntimeException { }

/** * MySql Database Class */ class MySql { private $server; private $name; private $password; private $db; private $connection;

public function __construct(array $config)

{

$this->server = $config['server'];

$this->name = $config['name'];

$this->password = $config['password'];

$this->db = $config['db'];

}

private function connect($server, $name, $password)

{

$this->connection = mysql_connect($server, $name, $password);

if (!$this->connection) {

$this->error("Unable to connect to '%s' as user '%s'", $server, $name);

}

}

private function select($db)

{

if (!mysql_select_db($db, $this->connection)) {

$this->error("Unable to select database '%s'", $db);

}

}

private function close()

{

$this->connection && mysql_close($this->connection);

}

private function connectSelect()

{

$this->connect($this->server, $this->name, $this->password);

$this->select($this->db);

}

/**

* @param $query

* @return MySqlResult

*/

public function query($query)

{

$this->connection || $this->connectSelect();

$result = mysql_query($query, $this->connection);

if (!$result) {

$this->error("Unable to execute query '%s'", $query);

}

return new MySqlResult($result);

}

/**

* @param string $format

* @param ...

* @throws MySqlException

*/

private function error($format)

{

$args = func_get_args();

array_shift($args);

$format .= ': %s';

$args[] = $this->connection ? mysql_error($this->connection) : mysql_error();

throw new MySqlException(vsprintf($format, $args));

}

public function __destruct()

{

$this->close();

}

}

/** * MySql Result Set - Array Based */ class MySqlResult implements Iterator, Countable { private $result; private $index = 0; private $current;

public function __construct($result)

{

$this->result = $result;

}

public function fetch($result_type = MYSQL_BOTH)

{

$this->current = mysql_fetch_array($this->result, $result_type);

return $this->current;

}

/**

* Return the current element

* @link http://php.net/manual/en/iterator.current.php

* @return array

*/

public function current()

{

return $this->current;

}

public function next()

{

$this->current && $this->fetch();

}

/**

* Return the key of the current element

* @link http://php.net/manual/en/iterator.key.php

* @return mixed scalar on success, or null on failure.

*/

public function key()

{

return $this->current ? $this->index : null;

}

/**

* Checks if current position is valid

* @link http://php.net/manual/en/iterator.valid.php

* @return boolean The return value will be casted to boolean and then evaluated.

* Returns true on success or false on failure.

*/

public function valid()

{

return (bool)$this->current;

}来源:stack overflow

mysql的exception_mysqlexception相关推荐

  1. mysql 快捷查询数据库各表占用空间,mysql查看索引占用空间,mysql查看数据占用空间

    先贴一张图! 第一步,"很重要" 在mysql中,有一个创建之初自带的库information_schema,这个库中包含着数据库相关信息,查询数据占用空间就是使用该库,所以首先进 ...

  2. mysql并发更新数据,多用户并发修改数据解决方案。

    mysql并发更新数据,多用户并发修改数据解决方案. 在系统中,有一些如余额.资产.积分的数据,是要保证数据一致性的.如,一个人使用两个设备同时进行消费操作,如何保证数据一致性的问题. 我们一起来思考 ...

  3. mysql查询字段大小写结果相同,mysql大小写查询不敏感,mysql5.7查询不区分大小写解决方案。

    下面有两条sql,主键查询,在mysql中查询到的结果相同. SELECT* FROM USER WHEREid = 'EM58hdK4nXC';SELECT* FROM USER WHEREid = ...

  4. 数据库中自定义排序规则,Mysql中自定义字段排序规则,Oracle中自定义字段排序规则,decode函数的用法,field函数的用法

    数据库中自定义排序 场景:有一张banner表,表中有一个status字段,有0, 1, 2三个状态位,我想要 1,0,2的自定义排序(这里是重点),然后再进行之上对sequence字段进行二次排序( ...

  5. mybatis查询报错:com.mysql.cj.exceptions.DataConversionException: Cannot determine value type from string

    mybatis查询报错: com.mysql.cj.exceptions.DataConversionException: Cannot determine value type from strin ...

  6. docker一步安装mysql,docker的魅力就在于此

    正常来说,使用docker安装东西的步骤是serach它有没有,然后pull它 这里其实只要一步(如果你没有安装过.没有端口占用等问题的话!!) $ docker run -d -p 3306:330 ...

  7. 设置腾讯云linux服务器中 MySQL 允许远程访问

    申请了一台linux腾讯云服务器,想要把数据库搭建在上面,本地的Windows直接可以访问 以下就是具体的操作流程,首先你需要安装好一个mysql,安装方法–>mysql安装(Linux) 接着 ...

  8. Linux安装mysql,一步到位!

    今天在腾讯云上面买了一个服务器,想要把自己的项目部署一下,就要安装mysql,以下是我的安装步骤,在网上有很多人把install敲错了,还有的少-get,种种错误试完之后,我决定发一篇 sudo ap ...

  9. Mysql函数group_concat、find_in_set 多值分隔字符字段进行数据库字段值翻译

    Mysql函数group_concat.find_in_set进行数据库字段值翻译 场景 配方表:记录包含的原料 sources表示原料,字段值之间用逗号分隔 原料表:对应原料id和原料名称 现需要查 ...

  10. 浅谈MySQL存储引擎-InnoDBMyISAM

    浅谈MySQL存储引擎-InnoDB&MyISAM 存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式 ...

最新文章

  1. javascript html 生成 pdf
  2. 银河麒麟可执行文件双击,闪退问题
  3. sudo gedit出现No protocol specified
  4. vs python生成exe文件_使用VScode编写python程序并打包成.exe文件-文件夹变成exe
  5. This time, ZTE has released the world‘s first
  6. 机器视觉:SLAM技术详解
  7. 28. Element nodeValue 属性
  8. ISO 22301 业务连续性管理(BCM) 认证培训及标准
  9. CVBS视频信号解析
  10. 使用outlook邮件服务器,使用OUTLOOK配置邮件服务
  11. postgresql 数据库迁移
  12. 简易租赁合同(免费)
  13. Matlab工具箱实现张正友相机标定
  14. ubuntu看不了bilibili视频
  15. 有关C语言中指针与对象的个人愚见
  16. IOS电影播放器—MPMoviePlayerController
  17. 【微信小程序教程】点击按钮修改view标签背景颜色
  18. 一味研究:岩石股份摘帽即收“两连板”,海银系要认真酿酒了吗?
  19. 找单生狗,模拟atoi,模拟offsetof,交换奇偶位
  20. 矩阵键盘基于51(UcosII)计算器小项目

热门文章

  1. android 百度地图自定义定位小箭头图标,并随着手机方向转动
  2. python倒数切片_python的切片操作
  3. 完全免费:鲜为人知的桌面正文内容检索工具(支持epub/mobi/azw3/markdown)
  4. 国家区块链漏洞库2020年区块链安全态势感知报告
  5. 如何计算页面的浏览率
  6. 在python中使用autoit_Python + Selenium + AutoIt 模拟键盘实现另存为、上传、下载操作详解...
  7. 华为工作十年离职感想
  8. 星期零参展FHC,推出新品“Pastrami”和“微笑乐摇杯”,引爆植物肉潮流
  9. JavaScript实现Sleep效果
  10. 解决Vscode使用LeetCode报错Failed to test the solution. Please open the output channel for details.