Почему я вижу в нескольких примерах запросов MySQL через php синтаксис:
$q = "CREATE TABLE '$tablename' ('$t_id_name')";
или что-то подобное? Я спрашиваю о одинарных кавычках вокруг имен переменных. Это требуется в строках MySQL? Если я повторяю строку, кажется, что она расширяет переменные, независимо от того, есть кавычки или нет.
И не вызовет ли это проблемы, если это будет сделано для чего-то, что должно быть целым числом?
Чтобы ответить на ваш вопрос, кавычки необходимы, но не для расширения переменной. Типичный запрос 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--
, Это имя пользователя будет эффективно возвращать всех пользователей в таблице.
Вы должны использовать backticks (`) для имени поля или таблицы, особенно если имя поля или таблицы совпадают с командой mysql. И вам нужно использовать одинарные кавычки (‘) для значения.