1

次のPHPスクリプトがあります。各記事のコメントを数えて印刷したい。

各記事のIDは、これによって「リコール」できます:(<?php echo $listing['Listing']['listing_id'];?>これはcontentid番号を返します)

今、私はこのスクリプトを持っています:

<?php
          $db =& JFactory::getDBO();
          $query = "SELECT COUNT(comments) AS totalcount WHERE contentid = ????? ";
          $db->setQuery($query);
          $count = $db->loadResult();
echo ($count); ?>

これをWHERE句に追加しようとしました:

"... WHERE contentid = {$listing['Listing']['listing_id']}"

ただし、$countは「0」のゼロを返します。この変数をWHERE句に追加するにはどうすればよいですか?

前もって感謝します!

4

3 に答える 3

2

sprintfを使用して、文字列をエスケープします。

$query = sprintf("SELECT COUNT(comments) AS totalcount WHERE contentid = '%s'",mysql_real_escape_string($listing['Listing']['listing_id']));
于 2012-04-13T18:06:04.517 に答える
2

整数の場合:

$query = "SELECT
    COUNT(comments) AS totalcount
WHERE
    contentid = " . ((int) $listing['Listing']['listing_id']);

文字列の場合:

$query = "SELECT
    COUNT(comments) AS totalcount
WHERE
    contentid = " . mysql_real_escape_string($listing['Listing']['listing_id']);

飽き飽きする最大のことはSQLインジェクションです。これにより、クエリが安全になります。toを明示的にキャストするintと、値が誤っている場合でも、int値が確実に渡されます。少なくとも、攻撃を受けることはありません。

于 2012-04-13T18:08:42.953 に答える
1

試す

$query = "SELECT COUNT(comments) AS totalcount WHERE contentid = '".mysql_real_escape_string($listing['Listing']['listing_id'])."'";

また

$query = "SELECT COUNT(comments) AS totalcount WHERE contentid = ".mysql_real_escape_string($listing['Listing']['listing_id']);

データ型によって異なります。

于 2012-04-13T18:03:20.973 に答える