2015-04-05 85 views
2

我正在使用PHP數據對象來鏈接數據庫。下面的查詢與MySQL正常工作。MySQL SUBSTRING_INDEX與sqlite集成 - PHP PDO

$con = new PDO("mysql:host=localhost; dbname=company; charset=utf8", "root","root"); 

$data_value = $_GET['value']; 
$sql = "SELECT SUBSTRING_INDEX(c_value, ',', 1) as c_index, SUBSTRING_INDEX(c_value, ',', -1) as c_name FROM `default_values` where category = 'Nationality'"; 

$smt = $con->prepare($sql); 
$smt->execute(); 
$row = $smt->fetchAll(PDO::FETCH_OBJ); 
print json_encode($row); 

但是,當我連接到sqlite,我不得不改變查詢下面的代碼。

$con = new PDO('sqlite:d:/company.sqlite'); 
$data_value = $_GET['value']; 
$sql = "SELECT substr(c_value,1, pos-1) as c_index, substr(c_value,pos+1) as c_name FROM (SELECT *, instr(c_value,',') as pos FROM default_values) WHERE category = 'Nationality';"; 

$smt = $con->prepare($sql); 
$smt->execute(); 
$row = $smt->fetchAll(PDO::FETCH_OBJ); 
print json_encode($row); 

See Working MySQL Fiddle
See Working Sqlite Fiddle

有沒有什麼辦法,我們可以用PHP-PDO做到這一點,不管數據庫連接。我的意思是隻更改數據庫連接,而不更改查詢。

謝謝你,
Supun

回答

1

MySQL的SUBSTRING_INDEX()分隔符的出現指定數量的前返回給定字符串的子字符串。

當指定的數字爲正數時,從最後一個分隔符左側返回的子串,以及當指定的數字爲負數時從最後一個分隔符的右側返回的子串。

如果指定的數字大於分隔符的出現次數,則返回的子串將是總字符串。如果指定的數字爲0,則不會從給定的字符串中獲取任何內容。 SQLite的3.8.6,SQLite的3.8.x,SQLite的3.7.x,SQLite的3.6.x的

例如::

sqlite> SELECT substr('TechOnTheNet.com', 5); 
    -> 'OnTheNet.com' 

sqlite> SELECT substr('TechOnTheNet.com', 5, 2); 
    -> 'On' 

sqlite> SELECT substr('TechOnTheNet.com', 1, 4); 
    -> 'Tech' 

sqlite> SELECT substr('TechOnTheNet.com', -3, 3); 
    -> 'com' 

sqlite> SELECT substr('TechOnTheNet.com', -3, 1); 
    -> 'c'` 


SUBSTR函數可以SQLite中的下列版本一起使用