MySQL SUBSTRING_INDEX 与 sqlite 集成 - PHP PDO
MySQL SUBSTRING_INDEX Integrate with sqlite - PHP PDO
我在 PHP 数据库中使用 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);
See Working MySQL Fiddle
See Working Sqlite Fiddle
有什么方法可以用 PHP-PDO 做到这一点,而不管数据库连接如何。我的意思是只更改数据库连接而不更改查询。
谢谢,
苏朋
MySQL SUBSTRING_INDEX() returns 给定字符串中指定的分隔符出现次数之前的子字符串。
当指定数字为正数时返回最后一个分隔符左边的子串,当指定数字为负数时从最后一个分隔符右边返回的子串。
如果指定的个数大于定界符出现的次数,则返回的子串将是整个字符串。如果指定的数字为 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'`
我在 PHP 数据库中使用 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);
See Working MySQL Fiddle
See Working Sqlite Fiddle
有什么方法可以用 PHP-PDO 做到这一点,而不管数据库连接如何。我的意思是只更改数据库连接而不更改查询。
谢谢,
苏朋
MySQL SUBSTRING_INDEX() returns 给定字符串中指定的分隔符出现次数之前的子字符串。
当指定数字为正数时返回最后一个分隔符左边的子串,当指定数字为负数时从最后一个分隔符右边返回的子串。
如果指定的个数大于定界符出现的次数,则返回的子串将是整个字符串。如果指定的数字为 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'`