
正文
php怎么监听数据库 怎么监控php状态
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
如何使用PHP来监听数据库的值变化
你的意思是:数据库一发生变化,你就得知道是吗?
PHP无法实现这功能,
只有LINUX 跑 shell脚本,每X分钟执行查询语句
要么就是你每执行一条语句,写入日志。
相关问答
Q1: php+mysql如何读取数据库数据?
先配置数据库------连接数据库--------选择数据库--------填写检索表-------输出检索内容
第一种解决方法:
一、配置一下数据库:
define("DB_HOST","localhost");//数据库地址,一般为localhost
define("DB_USER","root");//数据库用户名
define("DB_PSW","");//数据库密码
define("DB_DB","databasename");//需要操作的数据库
二、连接数据库:
$conn = mysql_connect(DB_HOST,DB_USER,DB_PSW) or die
三、选择数据库:
mysql_select_db(DB_DB,$conn) or die
四、检索表:(填写tablename)
$result = mysql_query("select * from tablename") or die
五、输出检索的内容:
while ($row = mysql_fetch_row($result)){foreach($row as $data){ echo $data.' ';} echo 'br。
Q2: 如何实现thinkphp中Db类的方法调用风格?
php怎么监听数据库我们先来看下官网对listen的说明:如果开启数据库的调试模式的话php怎么监听数据库,php怎么监听数据库你可以对数据库执行的任何SQL操作进行监听。这无疑很方便我们进行增删改查的调试php怎么监听数据库,以及通过执行的时间进行有效的sql优化,
友情提示:数据库监听要写在执行sql语句的前面,因为只有在调用Db::listen之后的SQL语句才会被监听,调用之前的语句不会被监听。至于为什么我们后面讲!
使用如下方法:
123456
Db::listen(function($sql, $time, $explain){ // 记录SQL echo $sql. ' ['.$time.'s]'; // 查看性能分析结果 dump($explain);});
有很多小伙伴疑问该方法应该放在哪里?使用之后为什么没有效果,很可能就是提示上所说的那样php怎么监听数据库了,那么接下来我们简单分析一下这个方法!
1、从Db::listen(),可以看出listen是Db中的一个静态方法,那么我们就去找db类
2、从Db类中没有找到该方法,但是我们从use think\db\Connection可以看出,引入了Connection类,我们在这个类找一下这个方法!
12345678910
/** * 监听SQL执行 * @access public * @param callable $callback 回调方法 * @return void */public function listen($callback){ self::$event[] = $callback;}
3、event 保存我们传入的回调方法
4、在看下面这2个方法
12345678910111213141516171819202122232425262728293031323334353637383940414243444546
/** * 数据库调试 记录当前SQL及分析性能 * @access protected * @param boolean $start 调试开始标记 true 开始 false 结束 * @param string $sql 执行的SQL语句 留空自动获取 * @return void */protected function debug($start, $sql = ''){ if (!empty($this-config['debug'])) { // 开启数据库调试模式 if ($start) { Debug::remark('queryStartTime', 'time'); } else { // 记录操作结束时间 Debug::remark('queryEndTime', 'time'); $runtime = Debug::getRangeTime('queryStartTime', 'queryEndTime'); $sql = $sql ?: $this-getLastsql(); $log = $sql . ' [ RunTime:' . $runtime . 's ]'; $result = []; // SQL性能分析 if ($this-config['sql_explain'] 0 === stripos(trim($sql), 'select')) { $result = $this-getExplain($sql); } // SQL监听 $this-trigger($sql, $runtime, $result); } }} protected function trigger($sql, $runtime, $explain = []){ if (!empty(self::$event)) { foreach (self::$event as $callback) { if (is_callable($callback)) { call_user_func_array($callback, [$sql, $runtime, $explain]); } } } else { // 未注册监听则记录到日志中 Log::record('[ SQL ] ' . $sql . ' [ RunTime:' . $runtime . 's ]', 'sql'); if (!empty($explain)) { Log::record('[ EXPLAIN : ' . var_export($explain, true) . ' ]', 'sql'); } }}
5、当我们执行了sql语句,就会触发会调用debug方法将执行日志写入日志文件中,同事调用trigger方法,如果我们最开始已经传入了回调方法,也就是
1
self::$event
不为空,(说明我们在执行sql语句之前就已经设置了监听)我们将调用我们的回调函数!
1
call_user_func_array
总结:在执行sql语句之前我们需要先设置监听,这就是为什么要把Db::listen()写在执行sql语句的前面!
下面我们来看下实际的效果:
1234567891011121314
public function expo(){ Db::listen(function($sql, $time, $explain){ // 记录SQL echo $sql. ' ['.$time.'s]'; // 查看性能分析结果 dump($explain); }); //Get data based on columns,执行sql语句 foreach($channel as $v) $list[$v['id']] = GetData::getData('news',"channel_id = {$v['id']} and status = 2",'id,title,author,create_time,channel_id,file_path','order_by desc','0,5'); return view('expo',[ 'list' = $list ]);}
效果图:
Q3: 用javascript和php做一个监听键盘输入的数据库动态查询
查询页面在例外一个php做,然后使用Ajax, 也就是你的keyup事件发生后,调用Ajax,ajax可以访问服务器的任何文件,包括php, 并且能返回这个php的运行完成后的输出结果, 而且整个过程是在不刷新页面的情况下完成的, 也就是Ajax在调用服务器文件的时候, 是后台运行的,你看不到他的运行过程的!
至于Ajax具体怎么用,请百度学习一下!
Q4: php 监听端口后,把获取的内容转发给服务器
你可以在监听的时候把监听到的内容存储起来,数据库/文件/缓存都行。
在浏览器能访问的脚本中把内容显示出来就行了。
或者你直接用websocket来监听,接受到数据直接写在页面上。
Q5: PHP如何实施监控数据库的更新,一旦有更新,就把更新的数据推送给Android?
那你可以在插入数据库那里设置监听呀,一有插入就往Android推送消息。
不然你只能通过每隔一段时间刷新一下读取数据库,看看有没有更新,有就推送,没有就继续监听,这个你可以自己设置更新时间。
关于php怎么监听数据库和怎么监控php状态的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







