通过网页更新时SQL出错

时间:2017-05-22 02:40:21

标签: php mysql sql

我正在尝试更新名为' FA1'通过网页。 用于此的代码是:

foreach($columns as $item)
{
    $sqlAtt = " update ". $class ." set ". $item ." = 'P' where `date` = '". $date ."' ";
    $resultAtt = mysqli_query($GLOBALS['con'],$sqlAtt);
    if (!$resultAtt) {
        printf("Error: %s\n", mysqli_error($GLOBALS['con']));
        exit();
    }
}   

$columns是表的列名。 $class是表格名称,$date具有今天的日期。

在通过SQL命令执行数据库内执行空间更新时,结果是,

1 row affected. (Query took 0.0002 seconds.)
update FA1 set FA14 = 'P' where `date` = '2017-05-22'

通过网页更新我得到的是:

  

错误:您的SQL语法出错;检查与您的MySQL服务器版本相对应的手册,以便在' =' P'附近使用正确的语法。其中`date` =' 2017-05-22''在第1行

如果我输出$ sqlAtt:

update FA1 set FA14
= 'P' where `date` = '2017-05-22' update FA1 set FA11
= 'P' where `date` = '2017-05-22

2 个答案:

答案 0 :(得分:1)

从您发布的输出查询中,看起来列名中还有一些额外的空格。请尝试修剪下面的列名,

$sqlAtt = " update ". $class ." set ". trim($item) ." = 'P' where `date` = '". $date ."' ";

要检查$ item中的值,请尝试var_dump($ item)。

答案 1 :(得分:1)

在创建打破查询的$columns数组时,您似乎有某种类型的换行符,我会先查看。

但是,UPDATE允许您以“column = value”逗号分隔的样式更改一个查询中的多个列。通过这种方式,您的性能将提高,因为您只运行一个查询,而不是您当前运行的多个查询(每次迭代一次)。这是您应该瞄准的格式:

UPDATE tbl SET 
  col1 = 'P',
  col2 = 'P' 

以这种方式做到:

foreach ($columns as $item) {
    $sets[] = trim($item) ." = 'P'";
}
$query = "UPDATE $class SET " . implode(',', $sets) . " WHERE `date` = '$date' ";
$resultAtt = mysqli_query($GLOBALS['con'], $query);
if (!$resultAtt) {
    printf("Error: %s\n", mysqli_error($GLOBALS['con']));
    exit();
}