2016-01-18 50 views
-2

我遇到了有关中断MySQL查询的字符串的语法问题。 还是我错了?PHP MySQL语法字符串错误

while($row = $result->fetch_assoc()) {  
    $minuts = $minut *60+3600; 

    $new_plan = strtotime($row['på_gulvet_rigtig'])+$minuts; 

    $new_plan = gmdate("H:i", $new_plan); 
    $new_plan = $new_plan; 

    echo $new_plan,"<br>"; 

    $sql1 = ("UPDATE lokal set på_gulvet_planen = " . $new_plan . " WHERE Id = ". $row['Id'] . ""); 
    if (mysqli_query($conn, $sql1)) { 
     echo "Record updated successfully <br>"; 
    } 
    else { 
     echo "Error updating record: " . mysqli_error($conn), "<br>"; 
    } 
} 

它输出:

12:40

错误更新记录:您的SQL语法错误;检查对应于你的MySQL服务器版本的权利 语法使用附近的 手册“:40 WHERE ID = 1”在行1

+3

'其他:40' =='40 '! –

回答

2

你是不是在执行前准备查询,以便任何文本列你在将数据放入需要被包裹在引号,像这样的

$sql1 = ("UPDATE lokal 
     set på_gulvet_planen = '" . $new_plan . "' 
     WHERE Id = ". $row['Id']); 

可以使字符串更易于阅读和调试,因此,如果您使用此构造

$sql1 = ("UPDATE lokal 
     set på_gulvet_planen = '$new_plan' 
     WHERE Id = {$row['Id']}"); 

注意使用大括号,当数据在什么比IE {$row['Id']}

一个标量这也将是更好地使用准备好的声明中这样

$sql1 = ("UPDATE lokal 
     set på_gulvet_planen = ? 
     WHERE Id = ?"); 
$stmt = mysqli_prepare($conn, $sql1); 
if ($stmt === FALSE) { 
    echo 'Query Error ' . mysqli_error($conn); 
    exit; 
} 

mysqli_stmt_bind_param($stmt, "s", $new_plan); 
mysqli_stmt_bind_param($stmt, "i", $row['Id']); 
$result = mysqli_stmt_execute($stmt); 
if ($result === FALSE) { 
    echo "Error updating record: " . mysqli_error($conn), "<br>"; 
} else { 
    echo "Record updated successfully <br>"; 
} 
+0

尽管这里可能没有sql注入的风险(http://stackoverflow.com/a/60496/5781248),但使用prepare/bind_param/execute来查看答案会很好。 –

+0

@ J.J.哈卡拉我希望这符合您的要求。提问者不太会打扰他,但我想其他人发现这个问题可能会做出额外的努力 – RiggsFolly