2

同じテーブル/データベースを2回クエリするJoomla環境内でphpスクリプトを開発しています。毎回、一致するものが見つかったかどうかを知る必要があります。

getNumRows() を使用するのが最善の方法のようです。Joomla のドキュメントは、その使用について非常に具体的です。

その他の結果セット メソッド getNumRows()

getNumRows() は、最後のクエリで検出され、読み取りを待機している結果行の数を返します。getNumRows() から結果を取得するには、クエリの後、結果を取得する前に実行する必要があります。

私はスクリプトでこれに従います。最初のクエリでは問題はありませんが、2 番目のクエリでは常に警告がスローされます。おそらく、2 回目の getNumRows() 呼び出しが最初のクエリから結果を取得した後であるためです。これは Joomla の要件に準拠していません。

解決方法はありますか?どうもありがとう!

問題の私のスクリプトの部分は次のとおりです。

$db = JFactory::getDBO();
$query = "SELECT * FROM #__art_mobiles WHERE user_agent_header='$ua'";
$db->setQuery($query);
$rowsAG = $db->getNumRows();
$replyAG = $db->loadRow();

if ($rowsAG == 0) {

//if no match check www.handsetdetection.com
//see https://www.handsetdetection.com/properties/vendormodel for current list of models in database together with headers
echo "not in local database - try external<br/>";  
$prod = '';

if ($hd3->siteDetect()) {

    $replyHD = $hd3->getReply();

    $man = $replyHD['hd_specs']['general_vendor'];
    $dev = $replyHD['hd_specs']['general_model'];
    $os = $replyHD['hd_specs']['general_platform'];
    echo "found in handsetdetection.com database<br/>";

    //check for provisional match in local database
    $query = "SELECT * FROM #__art_mobiles WHERE manufacturer='$man' AND device='$dev'";
    $db->setQuery($query);
    $rowsAGprov = $db->getNumRows();
    $replyAGprov = $db->loadRow();

    if ($rowsAGprov == 0) { **[ETC]**
4

3 に答える 3

5

これは、実行されたクエリに依存する$db->loadRow();asを使用すると問題になる可能性があると思います。getNumRows

たとえば、次のことを試すことができます。

$db = JFactory::getDBO();
$query = "SELECT * FROM #__art_mobiles WHERE user_agent_header='$ua'";
$db->setQuery($query);
$replyAG = $db->query();
$rowsAG = $db->getNumRows();

と:

$query = "SELECT * FROM #__art_mobiles WHERE manufacturer='$man' AND device='$dev'";
$db->setQuery($query);
$replyAGprov = $db->query();
$rowsAGprov = $db->getNumRows();

query と loadRow から返される結果の違いが何であるかはわかりませんが。これが機能するかどうかは、実験して確認する価値があります。

または、レコードが存在するかどうかを確認するためだけに使用している場合は、代わりに変数getNumRowsに対して何らかのチェックを行うことができます。$replyAG結果がない場合に loadRow が何を返すかを確認するために、もう一度実験する価値があるかもしれません。

于 2012-10-05T09:57:32.443 に答える
0

クエリを記述する前に、次のコードを追加する必要があります。

$query = $db->getQuery(true);
于 2012-10-05T09:58:21.557 に答える
0

You need to use

$db = JFactory::getDbo();
$query = $db->getQuery(true)
            ->select($db->qn(array('id')))
            ->from($db->qn('#__social_notifications'))
            ->where($db->qn('status') . ' = ' . $db->q(0));
$db->setQuery($query);
$db->execute();
$resultData = $db->getNumRows();
于 2015-08-19T09:41:15.730 に答える