PHP: Подготовленные заявления не могут выходить из одинарных кавычек - PullRequest
0 голосов
/ 31 августа 2018

Я добавляю значение в MySql для регистрации. Из-за проблемы «одинарных кавычек» я работал с подготовленными утверждениями. Обычно я использовал addlashes, но он не работает со всеми запросами sql, работает только с определенной строкой. Позвольте мне объяснить:

Это просто зарегистрироваться.

сторона Android моего кода:

 final String email=_email.getText().toString();
        final String password=_password.getText().toString();

        final String sqlcode ="Insert into login (email,password) VALUES ('"+email+"','"+password+"')";
        final String sqllogin="SELECT email FROM login WHERE email= '"+email+"'";

@Override
            protected Map<String, String> getParams() {
                Map<String,String> params=new HashMap<>();
                params.put("sqllogin",sqllogin);
                params.put(getString(R.string.sqlcode),sqlcode);
                return params;
            }

PHP сторона моего кода:

<?php

if ($_SERVER['REQUEST_METHOD'] =='POST'){

    $sqllogin = $_POST["sqllogin"];
    $sqlcode= $_POST["sqlcode"];

    require_once 'connect.php';

    mysqli_query($conn,"SET NAMES 'utf8'");

    $stmtcheck = $conn->prepare($sqllogin);
    $stmtcheck->execute();
    $stmtcheck->store_result();

      if ( $stmtcheck->num_rows >0) { // if email exists
      $result["message"] = "duplicate";

        echo json_encode($result);
        mysqli_close($conn);
        $stmtcheck->close();
      }
      else //if email !exists create one
      { 
        $stmtcheck->close();
        $stmtadd = $conn->prepare($sqlcode);

        if ($stmtadd->execute()) { 
            // it worked
            $result["message"] = "success";
            echo json_encode($result);
            mysqli_close($conn);
            $stmtadd->close();
         } else {
            // it didn't
            $result["message"] = "error";
            echo json_encode($result);
            mysqli_close($conn);
            $stmtadd->close();
         }
   }
}

?>

Я работаю с подготовленными утверждениями полностью, как вы видите. Но я не понимаю, почему одинарные кавычки не вставляются в базу данных. Более странная вещь: я могу вставить двойные кавычки.

1 Ответ

0 голосов
/ 31 августа 2018

Вы не используете подготовленные заявления! Ваше приложение - серьезная катастрофа безопасности, ожидающая, чтобы случиться

Вы генерируете строку SQL в своем приложении для Android и публикуете ее в веб-приложении. Веб-приложение вызывает $conn->prepare, но оно использует полный SQL-оператор, созданный с использованием строк в другом месте. У него нет заполнителей для привязки параметров.

Короче говоря, вы выполняете команды sql, которые клиент дает вам на доверие.

...