Если PHP не предназначен для чтения внутри строк в одинарных кавычках, то почему он заменяет значения переменных в одинарных кавычках в mysqli_query ()? - PullRequest
0 голосов
/ 28 октября 2018

PHP не должен искать внутри строк между одинарными кавычками, в отличие от двойных кавычек.Однако в моей строке запроса mysqli я помещаю переменные в список значений в одинарных кавычках, и это работает - значения переносятся из формы ввода в мой mysql в XAMPP.Это означает, что он должен быть внутри одинарных кавычек, чтобы определить, что там есть переменная и подставить значения в разделе значения запроса mysqli, что не должно быть.

Я бы подумал, что в запрос будут подставлены только двойные скобки, содержащие переменные, но на самом деле все наоборот - они НЕ работали!Я был вынужден преобразовать их обратно в одинарные кавычки, что не должно работать, но работает.

Например, когда все переменные PHP в разделе значений запроса mysql были определены ранее из формы ввода html, следующее полностью работает и вставляет данные формы в мою базу данных:

$host = 'localhost';
$user = 'root';
$pw = '';
$db = 'aliensdb';
$dbc = mysqli_connect($host, $user, $pw, $db);
$table = 'alien_abductions';
$query = "INSERT INTO $table (
    first_name, 
    last_name, 
    when_it_happened, 
    how_long, 
    how_many, 
    alien_description, 
    what_they_did, 
    fang_spotted, 
    other, 
    email)
    VALUES (
    '$first_name', 
    '$last_name',
    '$when_it_happened',
    '$how_long',
    '$how_many', 
    '$alien_description', 
    '$what_they_did', 
    '$fang_spotted', 
    '$other', 
    '$email'    
    )";

$result = mysqli_query($dbc, $query) or die('Error querying database.');
mysqli_close($dbc);

Этоработает, и переменные помещаются в значения, успешно вставленные, поскольку новая строка в моей базе данных нарушает законы PHP - или нет?В каких случаях PHP нарушает правило «одинарные скобки не анализируются» и / или правило «двойные скобки анализируются»?

Спасибо :)

1 Ответ

0 голосов
/ 28 октября 2018

PHP не раскрывает переменные внутри (PHP) строк в одинарных кавычках.У вас есть одинарные кавычки внутри строкового литерала в двойных кавычках, где они обрабатываются не иначе, как любой другой символ.

Кроме того, не используйте замену переменных, подобную этой, для запросов SQL.Используйте готовые заявления.Вы уязвимы для SQL-инъекций.

...