лучший способ выполнить mysql в php-скрипте

#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;< . Это всегда будет сделка.