Невозможно использовать переменную в запросе - PullRequest
1 голос
/ 08 августа 2011

Озадачен здесь: я смотрю на кучу кода, написанного на PHP4, но работающего под PHP5 - код (сокращенный) выглядит следующим образом:

$pid=(int)$customer_exists['pid'];//this value comes from an earlier query & does exist

$query2 = mysql_query("SELECT * FROM `products` AS p, `products_description` AS pd WHERE pd.products_id=p.products_id AND p.products_id='".(int)$pid." '"   );

Это не дает результата из базы данных.Если первая строка изменена на $ pid = 28;или если запрос изменяется только для поиска в одной таблице, то мы получаем результат.

Вывод $ pid до и после запроса отобразит значение, назначенное в строке 1

(перепробовал многоверсии самого запроса $ query2 - все получают один и тот же результат)

Чего мне здесь не хватает?

Ответы [ 3 ]

2 голосов
/ 08 августа 2011

Можете ли вы попробовать изменить это

AND p.products_id='".(int)$pid." '" 

до

AND p.products_id='".(int)$pid."'" 

есть пробел после двойной кавычки и перед одинарной кавычкой, который вам не нужен. Кроме того, вам не нужно (int) здесь, как вы уже делали это в предыдущей строке.

Дайте мне знать, если это работает.

0 голосов
/ 08 августа 2011

Как указано Wbdvlpr есть дополнительный пробел:

Кроме того, вам больше не нужно объединять строку, если инструкция заключена в двойные кавычки:

$query2 = mysql_query("SELECT * FROM `products` AS p, `products_description` AS pd WHERE pd.products_id=p.products_id AND p.products_id='$pid'");
0 голосов
/ 08 августа 2011

Здесь есть два момента, которые нужно улучшить:

  1. mysql_ * устарела в PHP 5.3 и скоро будет удалена, поэтому не используйте их.Вместо этого используйте mysqli_ * или PDO.
  2. Это идеальный код для SQL-инъекций (и это плохо).Лучше использовать подготовленные операторы.

Пример для PDO:

$pid=(int)$customer_exists['pid'];
$conn = new PDO($dsn, $user, $pass);
$stmt = $conn->prepare("`SELECT * FROM `products` AS p, `products_description` AS pd WHERE pd.products_id=p.products_id AND p.products_id='?'");
$result = $stmt->query(array($pid)); //note an array here
//Iterating
foreach ($result->fetchAll() as $row){
    //do what you need here
}

См. http://www.php.net/manual/en/pdo.construct.php для объяснения параметров конструктора PDO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...