встраивание существующего набора записей php в новый запрос mysql

#php #mysql

#php #mysql

Вопрос:

У меня есть существующий набор записей, который извлекает всю информацию из таблицы в mysql с именем $ rrows. Я надеюсь использовать этот существующий набор записей в новом запросе mysql.

Например, у меня есть следующая строка, которая извлекает «код продукта» из одной таблицы:

 <?php echo $rrows['productcode']; ?>
 

Затем я пытаюсь собрать соответствующие изображения из новой таблицы, используя этот код продукта, чем-то похожим на:

 <img src="<?php

mysql_select_db("dbname", $con);
mysql_set_charset('utf8');

$result = mysql_query("SELECT * FROM furnimages WHERE productcode='$rrows['productcode']'");

while($row = mysql_fetch_array($result))
{
    echo '' . $row['photo'] . '';   
}
mysql_close($con);
?>">
 

Можно ли это сделать? Первоначально я собирался СВЯЗАТЬ таблицы вместе, чтобы получить всю информацию, но это не работает, поскольку некоторые коды продуктов в основном не имеют соответствующих данных в таблице «furnimages»…..

Заранее спасибо! JD

Комментарии:

1. JOIN таблицы, как вы изначально предполагали. Если JOIN он не дает желаемых результатов, это потому, что у вас нет правильного запроса.

2. Если данные существуют, они должны работать так, как написано.

3. спасибо за комментарии — приведенный выше код выдает синтаксическую ошибку, поэтому я разместил ее здесь, в stackoverflow — не хотел никого обидеть! Попытаюсь разобраться.

4. @JD2011: если вы получаете синтаксическую ошибку, то скажите, что это за ошибка (вырезать и вставить ее). Это все равно, что пойти к врачу, а затем не сказать ни слова и удивляться, почему они не могут вам помочь, вместо того, чтобы просто сказать: «Эй, у меня сломана нога»

5. спасибо, Марк — рассмотрев все, что мне на самом деле не нужно включать такое поле в мою систему управления сайтами, поэтому я удалил его — ценю комментарий, хотя — все еще очень новичок во всем этом!

Ответ №1:

sprintf() — ваш лучший друг здесь.

 $sql = <<<sql
SELECT * FROM furnimages 
WHERE productcode=%d
sql;

$result = mysql_query(sprintf($sql, $rrows['productcode']));
 

Итак, %d является заполнителем в строке для замены во втором аргументе при вызове sprintf();

%d обозначает целочисленный заполнитель; если $rrows[‘productcode’] является строкой, используйте %s .

Это лучше, чем просто цитирование значения переменной, поскольку оно добавляет ограничение типа, которое снижает риск неприятной sql-инъекции.

Это также делает его в высшей степени более читаемым.

Однако ознакомьтесь с расширением PHP Data Objects, потому что это действительно единственный путь для такого рода вещей.

Комментарии:

1. сработало как шарм — большое спасибо!! Теперь рассмотрим расширение php data objects для получения дополнительной информации по этому вопросу.

2. «Это лучше, чем просто указывать значение переменной, поскольку оно добавляет ограничение типа, которое снижает риск неприятной sql-инъекции». Извините, но я должен не согласиться с «лучше». При таком подходе, чтобы доказать, что вы в безопасности, вам нужно посмотреть на два места: запрос (где некоторые переменные будут очищены %d ) и sprintf параметры (где остальные будут экранированы). В моей книге это хуже , чем просто смотреть sprintf . Это также оставляет вас открытыми для ошибок, вызванных обслуживанием, и, безусловно, не снижает риск (оба метода являются 100%-ными, если все сделано правильно).

3. там, где некоторые переменные будут очищены с помощью %d , в запросе есть только одна переменная, и если бы у вас было больше, вы бы использовали больше заполнителей, а не помещали переменные непосредственно в запрос. Не совсем с вами.