2015-04-15 2 views
-3

Я пробовал все из ниже пока я не могу показаться, чтобы получить его работуMySQL - Построить строку запроса

$sql="UPDATE filename SET weekday = {$_GET[wkd]} WHERE id = 2";  
$sql="UPDATE filename SET weekday = '$_GET[wkd]' WHERE id = 2";  
$sql="UPDATE filename SET weekday = '"{$_GET[wkd]}"' WHERE id = 2";  
$sql="UPDATE filename SET weekday = '."{$_GET[wkd]}".' WHERE id = 2"; 

Что такое правильный путь?
Благодаря

+1

Просто Замечание: это проблемы синтаксиса php, а не MySQL. –

+1

Ни один из них не является правильным. Вы не должны создавать свои запросы с помощью конкатенации, и вы не должны использовать несанкционированные данные. –

+0

Я предлагаю вам изучить PHP-PDO для операций с CRUD-базой данных ... –

ответ

0

Это:

$sql="UPDATE filename SET weekday = '" . $_GET['wkd'] . "' WHERE id = 2"; 

FYI, это очень плохая практика кодирования, вы должны проверить $ _GET, прежде чем добавить в SQL.

+0

Спасибо, но в этом случае $ _GET ['wkd'] уже проверен выше в коде. – Mffffffffffffff

+0

он не «проверяет» $ _GET, он строит вашу строку запроса на основе значения $ _GET, поэтому, если $ _GET ['wkd'] в понедельник, то $ sql = "UPDATE filename SET weekday =; monday 'WHERE id = 2 '... Вам удалось заставить его работать? –

0

Хорошо. Если будний день принимает строковые значения, то значение должно быть окружено кавычками, то есть:

$sql="UPDATE filename SET weekday = '" . $_GET['wkd'] . "' WHERE id = 2";

Это также эквивалентно:

$sql="UPDATE filename SET weekday = '{$_GET['wkd']}' WHERE id = 2";

Первые сцепляет строки вместе, второй просто вставляет переменную непосредственно в строку.

Для $_GET['wkd'] = "tuesday";, боты из тех вывода запросов этого:

UPDATE filename SET weekday = 'tuesday' WHERE id = 2

Если будний день принимает только числовые значения, то нет необходимости, чтобы окружить значение в кавычках (но вы все еще можете):

$sql="UPDATE filename SET weekday = " . $_GET['wkd'] . " WHERE id = 2";

который, как и первое, что эквивалентно:

$sql="UPDATE filename SET weekday = {$_GET['wkd']} WHERE id = 2";

Что для $_GET['wkd'] = 1, будет иметь и вывод запросов:

UPDATE filename SET weekday = 1 WHERE id = 2

точка не - нет один правильный синтаксис, они все работают.

Однако то, что вы действительно хотите делать это с помощью PDO или MySQLi с подготовленными операторами и параметров связывания, например, так:

$pdo = new PDO('... connection string ... '); 
$stmt = $pdo->prepare("UPDATE filename SET weekday = ? WHERE id = ?"); 
$stmt->execute(array($_GET['wkd'], 2)); 

Это связывают значение $_GET['wkd'] к первому ? в подготовленном заявлении , и буква 2 на значение второго символа??.Если вы будете использовать много вопросительных знаков, или теряя порядка, вы можете также использовать именованные заполнители, как это:

$pdo = new PDO('... connection string ... '); 
$stmt = $pdo->prepare("UPDATE filename SET weekday = :weekday WHERE id = :id"); 
$stmt->execute(array(
    'weekday' => $_GET['wkd'], 
    'id' => 2 
)); 

В этом примере я назвал заполнители так же, как поля - это ISN «т необходимо, но это, очевидно, более удобным для чтения, чем обозначения заполнители :asdfasdf и :lmnop (в этом случае массив быть передан функции execute будет ('asdfasdf' => $_GET['wkd'], 'id' => 2)

Зачем использовать связывание параметра? его лучшая защита против SQL Injection

Смежные вопросы