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 执锟叫★拷锟斤拷为锟斤拷锟斤拷锟叫达拷锟斤拷锟杰简单o拷 锟斤拷锟皆会将一些只锟斤拷锟斤拷询锟斤拷锟酵革拷锟斤拷锟斤拷同锟斤拷锟斤拷 master锟斤拷锟斤拷锟界:SHOW TABLES锟斤拷

锟斤拷锟斤拷

query

要锟斤拷锟皆碉拷 SQL 锟街凤拷锟斤拷锟斤拷

锟斤拷锟斤拷值

锟斤拷锟斤拷 MYSQLND_MS_QUERY_USE_MASTER 说锟斤拷锟斤拷锟酵革拷 master锟斤拷 锟斤拷锟斤拷 MYSQLND_MS_QUERY_USE_SLAVE 说锟斤拷锟斤拷一锟斤拷只锟斤拷锟斤拷洌� 锟斤拷锟斤拷锟酵革拷 slave 执锟叫★拷锟斤拷锟斤拷 MYSQLND_MS_QUERY_USE_LAST_USED 说锟斤拷锟斤拷锟斤拷锟斤拷一锟斤拷执锟叫的凤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷执锟叫o拷锟斤拷锟斤拷锟斤拷锟� 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