#php #mysql
#php #mysql
Вопрос:
Я новичок в mysql и пробую некоторые скрипты.
Единственное, чего я не понимаю, это то, почему (кажется) запросы mysql должны находиться внутри переменной php.
Это, например, не работает:
$username="root";
$password="";
$database="wmt";
$con=mysqli_connect("localhost","root","","wmt");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
else echo "correct";
mysqli_query($con,"LOAD DATA INFILE 'TOP_QUERIES-avtentichno.com-20140627-223259.csv'
INTO TABLE discounts
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY 'n'
IGNORE 1 ROWS");
Когда я просто пишу PHP и хочу вывести какой-нибудь HTML, я делаю это следующим образом:
<?php
code ();
...
?>
Here goes my HTML without worry about escaping!
<?php
morephp();
?>
Есть ли подобный «трюк» для выполнения mysql и избежания помещения моих SQL-запросов в переменные?
Комментарии:
1. Может быть, нотация heredoc поможет? php.net/manual/en/language.types.string.php хотя я не уверен, о какой переменной вы говорите в своем коде.
2. прямо с диди — какая переменная? ты имеешь в виду $ con?
3. Я имею в виду, что происходит после con
4. Это не следующая переменная
$con
, это строковый литерал.
Ответ №1:
Двойная кавычка в строке должна быть экранирована, потому что строковый литерал заключен в двойные кавычки.
В контексте строкового литерала это:
ENCLOSED BY '"'
должен быть заменен этим:
ENCLOSED BY '"'
Чтобы PHP не видел эту двойную кавычку как конец строкового литерала.
Это не проблема SQL; и это не проблема с переменными. Это проблема со строковыми литералами в PHP.
Комментарии:
1. спасибо, хороший улов. Я искал способ не иметь дело с экранированием.
2. @user1721135: Но с «экранированием» всегда придется иметь дело; не только в контексте строковых литералов PHP, но и в контексте SQL или любого другого языка программирования. Точно так же, как нам приходится иметь дело с экранированием символов «меньше» в HTML
amp;<
. Это всегда будет сделка.