0

以下 2 个查询是 php 中回显的结果:

UPDATE glymping_userdata
SET current_location_gps = '51.9171115;4.484812'
WHERE id = 1

UPDATE glymping_user_has_appointments
SET status = 'enroute',
start_location_gps = '51.9171115;4.484812'
WHERE userId = 1
AND appointmentId = 47

当在数据库中手动输入并且所有字段都正确填写时,这两个查询都有效。当我让 php 文件运行查询时,查询如上所示,但“start_location_gps”和“current_location_gps”为空。

查询中的值是字符串,数据库字段是 varchar(30)。然而,数据库中的字段是空的。

位置值是从 post 方法接收的。

有谁知道我忘记了什么或做错了什么?

编辑:

例子

public function SendQuery($query)
{
    $results = $this->mysqli->query($query);
    return $results;
}

public function UpdateUserLocation($currentLocationGps)
{
    $query = "UPDATE ".DB_PREFIX."userdata
                SET current_location_gps = '{$currentLocationGps}'
                WHERE id = ".$this->userId;
    //echo $query;
    $this->db->SendQuery($query);
}
4

1 回答 1

0

您当前的代码不检查 mysqli_query 的返回值;查询可能会“静默”失败。由于 WHERE 子句中的值错误,查询也可能不会影响数据库中的任何记录。
试试看

if ( !$this->db->SendQuery($query) ) {
  // query failed: syntax error, connection lost, access denied,duplicate entries, ...
  trigger_error($this->mysqli->error);
}
else {
  if ( 0 < $this->mysqli->affected_rows ) {
    // WHERE clause doesn't match any record, no values changed, ...
    trigger_error('no rows affected');
  }
}

您的查询也可能容易出现 sql 注入,请查看http://php.net/manual/en/security.database.sql-injection.php

于 2013-04-22T07:56:54.123 回答