2016-05-31 36 views
0

我正在创建一个可用于从数据库中选择单个行的函数。该函数的参数是select,table和where(这是一个数组)。将数组转换为字符串以创建sql查询

这是我到目前为止有:

public function select_row($select, $table, $where = '') { 
$sql = "SELECT {$select} FROM {$table}"; 

if(!empty($where)) { 
    $sql .= " WHERE {$where} LIMIT 1"; 
} else { 
    $sql .= " LIMIT 1"; 
} 

echo $sql;} 

什么,我想改变就是变,我想将其更改为数组$,这将是这样的:

$where = array('id' => '1'); 

但我不太确定如何做到这一点,我试过implode()但我无法弄清楚。

任何帮助将不胜感激,

基隆

+0

所以,你要$哪里是被骤降到一个SQL WHERE子句的阵列? (又名字符串) – cbronson

+0

没错,就是这样。 – Sutton

+0

如果这不仅仅是您的培训,比如商业或者操作系统项目,那么如果您使用流行的DBAL库之一而不是重新发明轮子会更好。 – michaJlS

回答

0

这里是你如何打造出来的where子句的例子。但我建议你使用查询构建器,例如这里是CakePHP的http://book.cakephp.org/3.0/en/orm/query-builder.html

<?php 
require 'connect.php'; 

$firstname = 'Alex'; 
$lastname = 'Smith'; 

$query = 'SELECT * FROM users'; 

$cond = array(); 
$params = array(); 

if (!empty($firstname)) { 
    $cond[] = "firstname = ?"; 
    $params[] = $firstname; 
} 

if (!empty($lastname)) { 
    $cond[] = "lastname = ?"; 
    $params[] = $lastname; 
} 

if (count($cond)) { 
    $query .= ' WHERE ' . implode(' AND ', $cond); 
} 

$stmt = $db->prepare($query); 
$stmt->execute($params); 

foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) { 
    print_r($row); 
} 
?> 
+0

我可以用MySQLi来代替PDO吗? – Sutton

+0

上面的条件构建了可以与mysqli一起使用的查询。 mysqli_query($ con,$ query); – ASaxe