(PECL mysqlnd_ms >= 1.0.0)
mysqlnd_ms_query_is_select — 锟斤拷询锟斤拷锟斤拷锟斤拷 SQL 锟结发锟酵革拷 master锟斤拷slave 锟斤拷锟斤拷锟斤拷锟绞癸拷玫锟� MySQL server 执锟叫★拷
$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