MySQL子字符串_索引与sqlite-PHPDO集成

MySQL子字符串_索引与sqlite-PHPDO集成,php,mysql,database,sqlite,pdo,Php,Mysql,Database,Sqlite,Pdo,我正在使用PHP数据对象链接数据库。下面的查询可以很好地使用mysql $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

我正在使用PHP数据对象链接数据库。下面的查询可以很好地使用mysql

$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);

无论数据库连接如何,我们都可以通过PHP-PDO实现这一点。我的意思是只更改数据库连接,而不更改查询

谢谢你,
Supun

MySQL SUBSTRING_INDEX()返回给定字符串中分隔符出现指定次数之前的子字符串

当指定的数字为正数时,从最终定界符左侧返回的子字符串;当指定的数字为负数时,从最终定界符右侧返回的子字符串

如果指定的数字大于分隔符的出现次数,则返回的子字符串将是总字符串。如果指定的数字为0,则不会从给定字符串中提取任何内容


substr函数可用于以下版本的SQLite: 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'`