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 メソッドから受け取ります。

私が忘れていることや間違っていることを誰かが知っていますか?

編集:

PHPの例

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 に答える