2014-12-06 3 views
0

Цените любую помощь, что я делаю неправильно? Необъявленная переменная: $ смещениеДинамическая переменная для установки OFFSET (mySQL, php)

$offset = 1; 

$sql = 'SELECT * FROM links order by payout desc limit $offset, 1'; 
+0

Это не может быть фактическим кодом, который создает эти сообщения об ошибках, так как с одинарными кавычками в любом случае не будет никакой замены переменных, вы просто получите буквальный '... limit $ offset, 1' в' 'sql'''', variable ... –

+0

Это не тот код, который я хотел использовать. Но это код, который дает эту ошибку. Я не понимаю, почему это необъявленная переменная? – Daniel

ответ

-2

Try:

$sql = 'SELECT * FROM links order by payout desc limit ' . intval($offset) . ', 1'; 
+1

поздравления, вы только что создали уязвимость SQL Injection. – Stephen

+0

Если смещение определено как 1, нет никакой уязвимости? И чтобы избежать этого, если это переменная get, используйте intval ($ offset). –

+0

В этой сингулярной ситуации да, приведение к int удаляет риск, но в качестве общего правила параметризованные запросы считаются лучшим решением, поскольку они могут защищать запросы с помощью любых входных переменных. – Stephen

1

Не используйте переменную подстановки в строках для построения запросов SQL, как это. Он создает уязвимости SQL-инъекций.

Использование PDO или MySQLi и поставляющие переменные как данные, например:

$pdo = new PDO(...); 

$stmt = $pdo->prepare('SELECT * from links ORDER BY payout DESC LIMIT :offset, 1'); 

if ($stmt->execute(array(':offset' => $offset)) { 
    $row = $stmt->fetch(); 
} 
+0

Вы можете сделать это, если вы уйдете, в этом случае это число, поэтому просто используйте intval. –

-1

Одно говоря, кажется, что вы написали переменную встроенный в одинарные кавычки, переменные могут быть признаны только в двойных кавычках

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