Android подключается к mysql с помощью php, ошибка запроса строки - PullRequest
1 голос
/ 29 декабря 2011

Я пишу программу для Android, которая использует http-пост для подключения к php-скрипту для подключения к базе данных mysql.query - это переменная для отправки.

Вот часть моего кода:

String query = "select `retailer`.`name` as `retailer`, `product`.`name` as `product`, `product`.price, `promotion`.discount, `promotion`.discount_type";
        query = query.concat(" from `retailer`, `consumer`, `product`, `promotion`, `sell`, `proximity`");
        query = query.concat(" where `consumer`.`email` = '"+consumer_email+"'");
        query = query.concat(" and `proximity`.`retailer_id` = `retailer`.`id`" +
                " and `proximity`.`consumer_id` = `consumer`.`id`" +
                " and `sell`.`retailer_id` = `retailer`.`id`" +
                " and `sell`.`product_id` = `product`.`id`" +
                " and `product`.`promotion_id` = `promotion`.`id`");

Обратите внимание, что consumer_email - это строка, содержащая письмо, которое я хочу запросить.Однако я продолжаю получать синтаксическую ошибку с этим.если я уберу строку consumer. email = '"+ consumer_email +"' ", он сможет работать без ошибок.

Что я хочу спросить, есть ли способ решить эту проблему? Это единственная цитата, связанная с электронным письмом, вызывает проблему?

1 Ответ

1 голос
/ 30 декабря 2011

Используйте готовое утверждение, как это.

Это устранит ошибку, которую вы видите. Это также безопасно и предотвращает взлом SQL-инъекций.

Вместо прямой замены адреса электронной почты в запросе используйте «?». Затем привяжите к нему значения во время выполнения.
http://php.net/manual/en/pdo.prepared-statements.php

   String query = ......<rest of query>
     query = query.concat(" where `consumer`.`email` = ? );
    ......<rest of query>

    $db = new mysqli('localhost', 'username', 'password', 'database');
    // Create statement object
    $stmt = $db->stmt_init();


// Create a prepared statement
if($stmt->prepare(query )) {
    $stmt->bind_param('s', $email_id);

    // Set your variable    
    $email_id= "example@exp.com";

    // Execute query
    $stmt->execute();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...