Запросы: ColdFusion для PHP - PullRequest
       1

Запросы: ColdFusion для PHP

0 голосов
/ 29 ноября 2011

Вот моя структура таблицы:

Table artwork
AID CID SCID    Title   Dimensions  Medium  ArtFilePath ArtDate DateAdded   ThumbFilePath   DisplayOrder    Comments    Details 

Table categories
CID CategoryName

Table subcategories
SCID    CID SubCategoryName SubHeaderText

Результат даст мне переменные getNext и getPrev, которые я могу использовать следующим образом:

<cfif prevDO gt 0 and getPrev.recordCount gt 0><a href="gallery_detail.cfm?AID=#getPrev.AID#">back</a></cfif>
<a href="gallery.cfm?CID=#getArt.CID#&SCID=#getArt.SCID#">#getArt.SubCategoryname#</a>
<cfif getNext.recordCount gt 0><a href="gallery_detail.cfm?AID=#getNext.AID#">next</a>    </cfif>

У меня есть три запроса, которые выполняются здесьв ColdFusion.AID - это идентификатор искусства # CID - это идентификатор CategoryName #, т. Е. Масла, рисунки, компьютерное искусство и т. Д. SCID - это идентификатор SubCategoryName #, т. Е. Мужчины, женщины, дети и т. Д.

.и дать все AID в этой группе для просмотра.Другими словами, позвольте мне увидеть все масла в мужской группе.

<cfquery name="getArt" datasource="mssqlcf_PDartist1">
select * from Artwork a
join Categories b on (b.CID = a.CID)
join SubCategories c on (c.CID = b.CID and c.SCID = a.SCID)
<!---left join Categories on (Categories.CID = Artwork.CID)
left join SubCategories on (SubCategories.CID = Categories.CID)--->
where AID = #AID#
order by DisplayOrder
</cfquery>

<cfset nextDO = getArt.DisplayOrder + 1>
<cfset prevDO = getArt.DisplayOrder - 1>

<cfquery name="getNext" datasource="mssqlcf_PDartist1">
select AID from Artwork
where CID = #getArt.CID#
and SCID = #getArt.SCID#
and DisplayOrder = #nextDO#
</cfquery>

<cfquery name="getPrev" datasource="mssqlcf_PDartist1">
select AID from Artwork
where CID = #getArt.CID#
and SCID = #getArt.SCID#
and DisplayOrder = #prevDO#
</cfquery>

Я пытался сделать то же самое с PHP, начиная с:

<?php
$dbname = 'pdartist2';
    $table = 'artwork';
$result = mysql_query("SELECT * from artwork
a join categories b on (b.CID = a.CID)
join subcategories c on (c.CID = b.CID and c.SCID = a.SCID)
where AID = $AID
order by DisplayOrder") or die(mysql_error());  
while($row = mysql_fetch_array($result)){   
    $AID = $row['AID'];
    $ArtFilePath = $row['ArtFilePath'];
    $ThumbFilePath = $row['ThumbFilePath'];
    $Title = $row['Title'];
    $Dimensions = $row['Dimensions'];
    $Medium = $row['Medium'];       
    $Comments = $row['Comments'];
    $DisplayOrder = $row['DisplayOrder'];
    $Details = $row['Details']; 
}
mysql_free_result($getArt);
?>

<?php $nextDO = getArt.DisplayOrder +1; ?>

<!--getNext-->
<?php
$dbname = 'pdartist2';
$table = 'artwork';
$result = mysql_query("SELECT AID from artwork where CID = getArt.CID and SCID = getArt.SCID and DisplayOrder = $nextDO") or die(mysql_error());
mysql_query($query);
?> 

Проблема, которую яу меня есть результаты второго запроса, потому что я не получаю результаты первого запроса в $ getart.

Вопрос в том, как выполнить запросы PHP с такими же результатами, как и у запросов ColdFusion?

Ответы [ 3 ]

4 голосов
/ 29 ноября 2011

также с обеих сторон, cf и php, не забудьте защитить себя от инъекций sql

например, код холодной сварки:

where aid = < cfqueryparam cfsqltype="cf_sql_integer" value="#aid#">
0 голосов
/ 30 ноября 2011

Я не получаю результаты первого запроса в $ getart.

Эта первая строка является довольно кратким описанием проблемы. Единственное, чего не хватает, - это каковы были реальные результаты по сравнению с тем, что вы ожидали? Например

«Я пытаюсь получить значение« DisplayOrder »в первой строке и увеличить его. Но вместо этого я получаю сообщение об ошибке xyz... (ИЛИ) вместо этого получаем значение из строки y. "

Мой php в лучшем случае сомнителен, но, насколько я понимаю, в вашем коде не объявлена ​​переменная $getart. Вы присвоили результат запроса переменной с именем $result, а не $getart.

$nextDO = getArt.DisplayOrder +1; 

Это все еще синтаксис CF Я считаю, что вам нужно сначала получить row из вашего объекта результатов. Затем получите доступ к определенному column в этой строке, используя обозначение массива - как вы делаете в цикле while. Проверьте онлайн документы для точного синтаксиса.

Но я не знал, что смогу поместить еще один запрос в цикл.

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

0 голосов
/ 29 ноября 2011

Прежде всего, ваш цикл:

while($row = mysql_fetch_array($result)){   
    $AID = $row['AID'];
    $ArtFilePath = $row['ArtFilePath'];
    $ThumbFilePath = $row['ThumbFilePath'];
    $Title = $row['Title'];
    $Dimensions = $row['Dimensions'];
    $Medium = $row['Medium'];       
    $Comments = $row['Comments'];
    $DisplayOrder = $row['DisplayOrder'];
    $Details = $row['Details']; 
}

ничего не делает.Структура while () будет перебирать каждую из записей, возвращаемых вашим SQL-запросом, но все, что вы, похоже, делаете, это каждый раз перезаписываете переменные.Не зная структуры вашей таблицы, я думаю, что ваш второй запрос должен быть вложен в цикл while ().Затем будет выполнен этот запрос для каждой записи, возвращенной из первого запроса.

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

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