2016-11-10 69 views
0

我的查询有些东西,但我无法找到答案。如何在PHP中调试SQL查询的连接?

$keys = array_keys($fields); 
    $values = array_values($fields); 

    $sql = "UPDATE " .$table. " SET " .implode("`, `", $keys) ."='".implode("', '", $values) . "' WHERE id={$id}"; 

而且它显示为:UPDATE users SET namepassword'Rick is vets', 'sdfg' WHERE id=5

但它必须显示为:UPDATE users SET name = 'Rick is vets', password='sdfg' WHERE id=5

+0

这是因为你使用'implode()'函数的方式。 – Maximus2012

+1

这是永远不会工作,你将需要循环一个数组来创建'name ='value''字符串 – 2016-11-10 22:09:48

+0

好的,但我的内爆函数是如何假设是那么? –

回答

2
$setString=''; 

foreach($fields as $k=>$v){ 

$setString .=$k." = '".$v."', "; 

} 
$setString=rtrim($setString,', '); 

包括$setString查询

+2

*“需要有人来看看我的查询”* - 他们从来没有说过修复它;-) –

+1

@弗雷德 - ii - 我需要廉价点;-) – 2016-11-10 22:23:40

+0

好吧,然后对我有10个字符串,但会更好_de-complicate_字符串连接 – RiggsFolly

2

尝试通过$fields阵列循环创建像这样的更新字符串:

$update_string = rtrim($update_string, ", "); 

然后将查询变成:

$sql = "UPDATE " .$table. " SET " .$update_string. " WHERE id={$id}"; 

这只是为了说明,因为您的代码可能概念

$update_string=''; 

foreach ($fields as $key=>$value) 
{ 
    $update_string .= $key."='$value', "; 
} 

那么字符串使用rtrim()功能删除最后一个逗号仍然是 开放给SQL注入攻击,在这种情况下你应该使用准备好的 声明。

+0

将数据值放在单引号内可能很有用! – RiggsFolly

+0

@RiggsFolly是的。谢谢。更新。 – Maximus2012

+0

希望你不要介意,我纠正并简化了你的代码 – RiggsFolly