SQL ОБНОВЛЕНИЕ с условиями if else - PullRequest
1 голос
/ 23 марта 2020

Я хочу обновить столбцы post_author и post_user переменными, если соответствующие столбцы не пусты в таблице. Если снять эти конкретные условия и оставить только одно, например post_author, то все работает, у меня проблемы только с частью sql 'case'.

При возникновении этой проблемы:

Примечание: не выполнено Ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса, который можно использовать рядом с 'SET post_author = case, когда post_author! = null, затем' evgen 'else null end, SET p' в строке 1

$query = "UPDATE posts SET post_title = '{$post_title}', 
post_tags= '{$post_tags}', 
post_date = now(), 
post_image = '{$post_image}', 
post_content = '{$post_content}',  
post_status = '{$post_status}', 
post_category_id = '{$post_category_id}', 
SET post_author = case when post_author !=null then '{$post_author}' 
                                               else null end, 
SET post_user = case when post_user !=null then '{$post_user}' 
                                           else null end 
WHERE post_id = $the_great_post_id ";

У меня есть это HTML:

<?php  
if(null !=  $post_user) {
?>
      <div class="form-group">
        <label for="post_user">User</label>

       <input type="text" class="form-control" name="post_user" value="<?php echo $post_user; ?>">
    </div>

<?php   }
if(null !=  $post_author) {
?>
      <div class="form-group">
        <label for="post_author">Author</label>

       <input type="text" class="form-control" name="post_author" value="<?php echo $post_author; ?>">
       </div>

<?php   }  ?>

Ответы [ 2 ]

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

Если у вас

SET post_author = case when post_author !=null then '{$post_author}' 
                                               else null end,

, есть несколько проблем, во-первых, вам не нужно SET. Во-вторых, использование else null установит значение в null вместо того, чтобы оставить поле с его исходным значением.

В этой версии он использует ...

post_author = case when post_author is null then '{$post_author}' else post_author end, 

, что вместе дает вам ...

UPDATE posts 
    SET post_title = '{$post_title}', 
        post_tags= '{$post_tags}', 
        post_date = now(), 
        post_image = '{$post_image}', 
        post_content = '{$post_content}', 
        post_status = '{$post_status}', 
        post_category_id = '{$post_category_id}', 
        post_author = case when post_author is null then '{$post_author}' else post_author end, 
        post_user = case when post_user is null then '{$post_user}' else post_user end 
    WHERE post_id = $the_great_post_id 

Другая вещь, на которую следует обратить внимание, это то, что вы следует использовать подготовленные операторы, поскольку это небезопасно и может разрешить любые проблемы.

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

Вам не нужно SET для последних двух значений

  $query = "
      UPDATE posts 
      SET post_title = '{$post_title}', 
      post_tags= '{$post_tags}', 
      post_date = now(), 
      post_image = '{$post_image}',
      post_content = '{$post_content}', 
      post_status = '{$post_status}', 
      post_category_id = '{$post_category_id}', 
      post_author = case when post_author !=null then '{$post_author}' else null end, 
      post_user = case when post_user !=null then '{$post_user}' else null end 
      WHERE post_id = $the_great_post_id ";

В любом случае вам не следует использовать PHP переменные в SQL, так как вы рискуете SQL инъекции. Чтобы избежать этого, вам следует взглянуть на подготовленный оператор и обязательный параметр для вашего драйвера PHP db.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...