одинарные кавычки вокруг переменных в запросах MySQL

Почему я вижу в нескольких примерах запросов MySQL через php синтаксис:

$q = "CREATE TABLE '$tablename' ('$t_id_name')";

или что-то подобное? Я спрашиваю о одинарных кавычках вокруг имен переменных. Это требуется в строках MySQL? Если я повторяю строку, кажется, что она расширяет переменные, независимо от того, есть кавычки или нет.

И не вызовет ли это проблемы, если это будет сделано для чего-то, что должно быть целым числом?

2

Решение

Чтобы ответить на ваш вопрос, кавычки необходимы, но не для расширения переменной. Типичный запрос SQL будет выглядеть так:

$q = "SELECT * FROM `table` WHERE `first_name` = 'user3475234'";

Теперь рассмотрим следующий пример:

<?php
$tablename = "users";
$user = "user3475234";

$q = "SELECT * FROM `$tablename` WHERE `first_name` = '$user'";

echo $q;

Это будет отображать: SELECT * FROM `users` WHERE `first_name` = 'user3475234', Обратите внимание, что кавычки не были необходимы для вывода строки, но они были необходимой частью запроса.

При этом, подобный код открывает ваш скрипт для SQL-инъекций. Я не буду объяснять слишком много об этом, так как есть много ресурсов, обсуждающих это, но рассмотрим пример, где чье-то имя пользователя user3475234' OR 1==1--, Это имя пользователя будет эффективно возвращать всех пользователей в таблице.

3

Другие решения

Вы должны использовать backticks (`) для имени поля или таблицы, особенно если имя поля или таблицы совпадают с командой mysql. И вам нужно использовать одинарные кавычки (‘) для значения.

2

По вопросам рекламы [email protected]