mysqlnd_ms_query_is_select

(PECL mysqlnd_ms >= 1.0.0)

mysqlnd_ms_query_is_select查询给定的 SQL 会发送给 master、slave 还是最后使用的 MySQL server 执行。

说明

mysqlnd_ms_query_is_select ( string $query ) : int

查询给定的 SQL 会发送给 master、slave 还是最后使用的 MySQL server 执行。

插件内置的读写分离会分析 SQL,然后决定到底把他发送到哪里执行。这个读写分离器非常 的基本和简单。插件会将所有的查询发送给 master,除非他以 SELECT 开头,或者使用 SQL hints 指定要去 slave 执行。因为这个读写分离很简单, 所以会将一些只读查询发送给主从同步的 master,例如:SHOW TABLES

参数

query

要测试的 SQL 字符串。

返回值

返回 MYSQLND_MS_QUERY_USE_MASTER 说明发送给 master。 返回 MYSQLND_MS_QUERY_USE_SLAVE 说明是一个只读语句, 将发送给 slave 执行。返回 MYSQLND_MS_QUERY_USE_LAST_USED 说明会在上一次执行的服务器连接中执行,这可能是 master 也可能是 slave。

如果通过设定 mysqlnd_ms.disable_rw_split 禁用了读写分离, 那么函数可能返回 MYSQLND_MS_QUERY_USE_MASTER 或者返回 MYSQLND_MS_QUERY_USE_LAST_USED

范例

Example #1 mysqlnd_ms_query_is_select() example

<?php
function is_select($query)
{
 switch (
mysqlnd_ms_query_is_select($query))
 {
  case 
MYSQLND_MS_QUERY_USE_MASTER:
   
printf("'%s' should be run on the master.\n"$query);
   break;
  case 
MYSQLND_MS_QUERY_USE_SLAVE:
   
printf("'%s' should be run on a slave.\n"$query);
   break;
  case 
MYSQLND_MS_QUERY_USE_LAST_USED:
   
printf("'%s' should be run on the server that has run the previous query\n"$query);
   break;
  default:
   
printf("No suggestion where to run the '%s', fallback to master recommended\n"$query);
   break;
 }
}

is_select("INSERT INTO test(id) VALUES (1)");
is_select("SELECT 1 FROM DUAL");
is_select("/*" MYSQLND_MS_LAST_USED_SWITCH "*/SELECT 2 FROM DUAL");
?>

以上例程会输出:

INSERT INTO test(id) VALUES (1) should be run on the master.
SELECT 1 FROM DUAL should be run on a slave.
/*ms=last_used*/SELECT 2 FROM DUAL should be run on the server that has run the previous query

相关文章
php cubrid mysql 兼容性函数 return the number of rows affected by the last sql statementphp cubrid mysql 兼容性函数 ping a server connection or reconnect if there is no connectionphp mssql 函数 关闭ms sql server链接php mssql 函数 打开ms sql server链接php mssql 函数 executes a stored procedure on a ms sql server databasephp mysql 函数 发送一条 mysql 查询php mysql 函数 向 mysql 发送一条 sql 查询,并不获取和缓存结果的行php mysqlnd ms 函数 switch to global sharding server for a given tablephp mysqlnd ms 函数 返回最后的全局同步 id gtid php mysqlnd ms 函数 查询给定的 sql 会发送给 master、slave 还是最后使用的 mysql server 执行。php mysqlnd ms 函数 sets the quality of service needed from the clusterphp mysqlnd ms 函数 sets a callback for user defined read/write splittingphp mysqlnd ms 函数 starts a distributed/xa transaction among mysql serversphp mysqlnd ms 函数 commits a distributed/xa transaction among mysql serversphp mysqlnd ms 函数 rolls back a distributed/xa transaction among mysql serversphp mysqlnd uh 函数 converts a mysql connection handle into a mysqlnd connection handlephp postgresql 函数 submits a command to the server and waits for the result with the ability to pass parameters separately from the sql command textphp postgresql 函数 执行查询php yp/nis 函数 returns the machine name of the master nis server for a mapphp ms sql server pdo connecting to microsoft sql server and sybase databases
关注编程学问公众号