2010-07-06 2 views
1

я пытаюсь сделать следующий запрос в PHPВыполнение запроса SQL в PHP, который зависит от переменной

  $sqlstr = mysql_query("SELECT * FROM sales where passport = $row['passport']"); 
      if (mysql_numrows($sqlstr) != 0) { 
      while ($row = mysql_fetch_array($sqlstr)) { 
      echo $row['firstname']; 
      }} 

Как я могу включить значение $ строки [ «паспортной»] в мой запрос?

+0

Похоже, у вас есть ?! Каков печатный результат вашего SQL-запроса? –

ответ

5

Вы отсутствуете цитаты:

$sqlstr = mysql_query("SELECT * FROM sales where passport = '{$row['passport']}'"); 
7

Прежде всего вы забыли одинарные кавычки. sAc исправил это уже в своем ответе. Но я хотел бы рассмотреть также использовать ускользающую функцию из-за безопасность-вопросы:

$sqlstr = mysql_query(" 
SELECT 
    * 
FROM 
    sales 
WHERE 
    passport = '" . mysql_real_escape_string($row['passport']) . "'"); 
+0

+1 для 'mysql_real_escape_string', совсем забыл об этом. – Sarfraz

+0

Это связано не только с соображениями безопасности: вы не хотите, чтобы повреждение данных или сбои в программе. –

5

Я хотел бы избежать вручную спасаясь/дезинфицирующий переменные и просто использовать подготовленные заявления. Это было то, чему я не научился, намного позже в моей карьере развития сети, и мне жаль, что я не узнал об этом раньше. Это сэкономит вам массу неприятностей и будет безопаснее всего.

Вы можете использовать mysqli_stmt class для выполнения MySQL-запросов с помощью подготовленных операторов, или вы можете использовать PHP Data Objects (PDO) extension, который работает с MySQL, PostgreSQL и другими РСУБД.

Просто, чтобы показать вам, как это выглядит, вот первый пример из PDOStatement->bindParam doc page:

<?php 
/* Execute a prepared statement by binding PHP variables */ 
$calories = 150; 
$colour = 'red'; 
$sth = $dbh->prepare('SELECT name, colour, calories 
    FROM fruit 
    WHERE calories < :calories AND colour = :colour'); 
$sth->bindParam(':calories', $calories, PDO::PARAM_INT); 
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12); 
$sth->execute(); 
?> 
Смежные вопросы