如何更换所有'?'变量?类似的东西:
$name = 'test' ;
$lname = 'lastTest';
$id = 1 ;
->where ( 'customers.name = ? and customers.lastname = ? and customers.id = ?' , $name , $lname , $id ) ;
输出:
customers.name = 'test' and customers.lastname = 'lastTest' and customers.id = 1
有什么想法吗?
答案 0 :(得分:5)
我真的认为你应该使用像PDO这样的库,但是这里仍然是一个解决方案:
public function where($query)
{
$args = func_get_args();
array_shift($args);
$query = preg_replace_callback('/\?/', function($match) use(&$args)
{
return array_shift($args); // wrap in quotes and sanitize
}, $query);
return $query;
}
答案 1 :(得分:1)
好吧,对于这样的原始替换,您可以使用标准的printf语法。
$name = "'test'";
$lname = "'lastTest'";
$id = 1;
$sql = sprintf('customers.name = %s and customers.lastname = %s and customers.id = %d' ,
$name , $lname , $id ) ;
请注意,当您必须在查询中添加文字占位符时,printf语法支持占位符转义,以用于这种罕见但可能的情况。
但是,对于实际使用情况,我实现了类型占位符,允许您添加不同类型的数据 - 标识符,数组等
答案 2 :(得分:0)
// ModifiedQuery变量存储您的预期格式。
$query = "customers.name = ? and customers.lastname = ? and customers.id = ?";
$params = array("?", "?", "?");
$actualParams = array($name, $lname, $id);
$modifiedQuery = str_replace($params, $actualParams, $query);
答案 3 :(得分:0)
我不认为PDO是诚实的,但准备好的声明已经为你做了mysqli,这是一个选择吗?