обновление базы данных MySQL со временем с помощью mysqli_multi_query (php) - PullRequest
0 голосов
/ 24 марта 2020

Я использую приведенный ниже код для вставки текста в БД, а также для вставки текущего времени (только время, а не дата)

$time = date("h:i");
$query = "UPDATE a_2020 SET done = 'yes' WHERE id = '2' ;";
$query .= "UPDATE a_2020 SET nowTime = $time WHERE id = '1' ";
$result = mysqli_multi_query($con,$query);
echo mysqli_error($con);

, но каждый раз получаю ошибку ниже время без обновления базы данных:

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'UPDATE a_2020 SET nowTime = 09:23 WHERE id = '1' at line 1 

Я пытался изменить тип столбца на datetime, timestamp, text ... et c и безрезультатно, после того, как вы решите проблему, я также хочу добавить другой pastTime и хотите получить дисперсию между nowTime и pastTime.

Ответы [ 3 ]

1 голос
/ 24 марта 2020

Вам нужны кавычки в любое время.

$time = date("h:i");
$query = "UPDATE a_2020 SET done = 'yes' WHERE id = '2' ;";
$query .= "UPDATE a_2020 SET nowTime = '$time' WHERE id = '1' ";
$result = mysqli_multi_query($con,$query);
echo mysqli_error($con);

Обратите внимание, что по моему опыту, редко есть веская причина использовать mysqli_multi_query(). Это дает мало пользы и только усложняет ситуацию. Просто дважды наберите mysqli_query().

. Как правило, лучше использовать подготовленные операторы, которые недоступны при mysqli_multi_query(). Это позволяет избежать проблем с цитированием, а также защищает от инъекций SQL.

0 голосов
/ 25 марта 2020

Не используйте mysqli_multi_query()!

Если вы хотите выполнить два таких запроса, используйте готовые операторы. В вашем случае, поскольку у вас нет параметров для передачи в первом запросе, вы можете использовать query().

$time = date("h:i");

$con->query("UPDATE a_2020 SET done = 'yes' WHERE id = '2'");

$stmt = $con->prepare("UPDATE a_2020 SET nowTime = ? WHERE id = '1'");
$stmt->bind_param('s', $time);
$stmt->execute();

Пожалуйста, прочитайте также: Как получить сообщение об ошибке в MySQLi?

0 голосов
/ 24 марта 2020

Я думаю, что использование CASE - лучшее решение для вас ...

UPDATE a_2020 
SET
  done = CASE 
    WHEN id = '2' 
      THEN 'yes' 
    ELSE done 
    END
  , nowTime = CASE 
    WHEN id = '1' 
      THEN $time 
    ELSE nowTime 
    END;
...