Alt A ниже – инструкция из учебника php–mysql. Он работает так, как должен.
Я обнаружил, что значение id довольно запутано и проверено alt B. Это также сработало!
Какова точка с id-значением alt A?
MySQL 5.0.51, PHP 5.2.6
// Alt A : $sql = "SELECT * FROM example WHERE id = '".$q."'"; // Alt B : $sql = "SELECT * FROM example WHERE id = $q";
Это всего лишь два разных подхода к построению строки из статических и переменных данных.
Альтернатива A использует конкатенацию или объединение строковых и переменных токенов с использованием оператора конкатенации.
Альтернатива B использует переменное расширение, в котором переменные внутри строки с разделителями с двойной кавычкой расширяются до значений во время оценки.
Также не обязательно лучше или предпочтительнее, но если вы, например, должны иметь строки с разделителями одной кавычки, тогда вам нужно будет использовать альтернативный A.
Конечно, ни один из них не является предпочтительным для создания SQL-запросов с привязанными параметрами, поскольку это не делает вас уязвимыми для атак SQL-инъекций.
Есть две причины использовать пример в «Alt A». Во-первых, если строка заключена в одинарные кавычки '', имя переменной будет использоваться в строке вместо ее значения.
$id = 7; 'SELECT * FROM table WHERE id = $id' //works out to: WHERE id = $id "SELECT * FROM table WHERE id = $id" //works out to: WHERE id = 7
Во-вторых, полезно комбинировать строки с результатами вызова функции.
"SELECT * FROM table WHERE id = '".getPrimaryId()."'"
Вне того, что уже было сказано, я нашел наилучшую практику, если я пишу запрос, чтобы написать его так:
$ sql = "SELECT * FROM table WHERE uid =". $ uid. «ПРЕДЕЛ 1»;
Причиной написания SQL, как это, является то, что 1. MySQL-запрос не должен анализировать переменные PHP в Query, а 2 теперь вы легко читаете и управляете запросом.
Когда PHP общается с MySQL, это фактически (по сути) два языка, обменивающиеся друг с другом. Это означает, что строка будет обрабатываться первым языком перед отправкой на другой. Это также означает, что важно думать в терминах принимающего языка
В этом случае:
$q = 'some_name';<br/> $query = "SELECT * FROM exempel WHERE id = $q";<br/>
вы говорите MySQL
"SELECT * FROM example1 WHERE id = some_name.
В этом случае:
$q = 'some_name';<br/> $query = "SELECT * FROM exempel WHERE id = '$q'";<br/>
и этот случай:
$q = 'some_name';<br/> $query = "SELECT * FROM exempel WHERE id = '".$q."'";<br/>
вы говорите MySQL
"SELECT * FROM example1 WHERE id = 'some_name'.
Первый пример должен вызывать ошибку, поскольку some_name не является допустимой частью запроса MySQL (в этом контексте). С другой стороны, следующие два будут работать нормально, потому что MySQL будет искать строку «some_name».
Вы также можете сделать это:
$sql="SELECT * FROM exempel WHERE id = {$q}";
что полезно для настройки таких вещей, как:
$sql="SELECT * FROM exempel WHERE id = {$row[id]}";
в 'alt B', $ q должен быть int или float или другим числовым
в 'alt A', $ q может быть любой строкой, int и т. д.
Единственная цитата делает это возможным. Это просто трудно увидеть, если вы смотрите на него в первый раз.