簡體   English   中英

Datastax Cassandra PHP驅動程序

[英]Datastax Cassandra PHP Driver

我正在使用PHP的Datastax Cassandra驅動程序,並希望能夠檢查查詢是否失敗,以免在數據庫中找不到結果。 現在,如果查詢失敗,日志將報告以下內容

PHP Fatal error:  Uncaught exception 'Cassandra\\Exception\\RuntimeException' with message 'No hosts available for the control connection' in /var/www/html/includes/conditions.php:153\nStack trace:\n#0 /var/www/html/includes/conditions.php(153): Cassandra\\DefaultCluster->connect('loop_non_hadoop')\n#1 /var/www/html/index.php(159): check_key('0x851702c16d824...')\n#2 {main}\n  thrown in /var/www/html/includes/conditions.php on line 153, referer: http://172.29.195.10:5050/html/index.php

如果查詢成功,它將按預期返回數據。 這是功能

function check_key($key){
    $cluster = Cassandra::cluster()->build();
    //set this to the appropriate keyspace
    $keyspace = 'loop_non_hadoop'; 
    $session = $cluster->connect($keyspace);
    $query = "SELECT * FROM events WHERE key=$key";
    $statement = new Cassandra\SimpleStatement($query);

    $results = $session->execute($statement);

    if(empty($results)){
        return;
    }
    else {
        foreach ($results as $row) {
            echo "<tr id='cell'><td>Title</td><td>" . $row['title'] . "</td></tr>";
            echo "<tr><td>Location</td><td>" . $row['locationName'] . "</td></tr>";
            echo "<tr id='cell'><td>City</td><td>" . $row['city'] . "</td></tr>";
            echo "<tr><td>State</td><td>" . $row['state'] . "</td></tr>";
            echo "<tr id='cell'><td>Zip</td><td>" . $row['zipcode'] . "</td></tr>";
            echo "<tr><td>Address</td><td>" . $row['street'] . "</td></tr>";
            echo "<tr id='cell'><td>Description</td><td>" . $row['summary'] . "</td></tr>";
            echo "<tr><td>Url</td><td>" . $row['url'] . "</td></tr>";
            echo "<tr id='cell'><td>Start</td><td>" . $row['start'] . "</td></tr>";
            echo "<tr><td>End</td><td>" . $row['end'] . "</td></tr>";
        }
        return true;
    }
}   

在此先感謝您的幫助

更新

我發布的先前錯誤可能與我的VM和cassandra崩潰有關,無論如何,我仍然需要檢查是否為空。

謝謝

更新

按照發布的建議,我最終做了以下工作

function check_key($key){
    try{
        $cluster = Cassandra::cluster()->build();
        //set this to the appropriate keyspace
        $keyspace = 'loop_non_hadoop'; 
        $session = $cluster->connect($keyspace);
        $query = "SELECT * FROM events WHERE key=$key";
        $statement = new Cassandra\SimpleStatement($query);

        $results = $session->execute($statement);

        foreach ($results as $row) {
            echo "<tr id='cell'><td>Title</td><td>" . $row['title'] . "</td></tr>";
            echo "<tr><td>Location</td><td>" . $row['locationName'] . "</td></tr>";
            echo "<tr id='cell'><td>City</td><td>" . $row['city'] . "</td></tr>";
            echo "<tr><td>State</td><td>" . $row['state'] . "</td></tr>";
            echo "<tr id='cell'><td>Zip</td><td>" . $row['zipcode'] . "</td></tr>";
            echo "<tr><td>Address</td><td>" . $row['street'] . "</td></tr>";
            echo "<tr id='cell'><td>Description</td><td>" . $row['summary'] . "</td></tr>";
            echo "<tr><td>Url</td><td>" . $row['url'] . "</td></tr>";
            echo "<tr id='cell'><td>Start</td><td>" . $row['start'] . "</td></tr>";
            echo "<tr><td>End</td><td>" . $row['end'] . "</td></tr>";
        }
        return true;
    }
    catch(Exception $e){
        //Casandra error
        var_dump($e->getMessage());
    }
    finally {
        return;
    }
}

謝謝你的建議

使用try catch

function check_key($key){
    try{
        $cluster = Cassandra::cluster()->build();
        //set this to the appropriate keyspace
        $keyspace = 'loop_non_hadoop'; 
        $session = $cluster->connect($keyspace);
        $query = "SELECT * FROM events WHERE key=$key";
        $statement = new Cassandra\SimpleStatement($query);

        $results = $session->execute($statement);

        if(empty($results)){
            return;
        }
        else {
            foreach ($results as $row) {
                echo "<tr id='cell'><td>Title</td><td>" . $row['title'] . "</td></tr>";
                echo "<tr><td>Location</td><td>" . $row['locationName'] . "</td></tr>";
                echo "<tr id='cell'><td>City</td><td>" . $row['city'] . "</td></tr>";
                echo "<tr><td>State</td><td>" . $row['state'] . "</td></tr>";
                echo "<tr id='cell'><td>Zip</td><td>" . $row['zipcode'] . "</td></tr>";
                echo "<tr><td>Address</td><td>" . $row['street'] . "</td></tr>";
                echo "<tr id='cell'><td>Description</td><td>" . $row['summary'] . "</td></tr>";
                echo "<tr><td>Url</td><td>" . $row['url'] . "</td></tr>";
                echo "<tr id='cell'><td>Start</td><td>" . $row['start'] . "</td></tr>";
                echo "<tr><td>End</td><td>" . $row['end'] . "</td></tr>";
            }
            return true;
        }
    }catch(\Exception $e){
        //Casandra error
        var_dump($e->getMessage());
    }
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM