简体   繁体   English

Datastax Cassandra PHP驱动程序

[英]Datastax Cassandra PHP Driver

I am using the Datastax Cassandra driver for php and would like to be able to check if a query fails do to no results being found in the database. 我正在使用PHP的Datastax Cassandra驱动程序,并希望能够检查查询是否失败,以免在数据库中找不到结果。 Right now if the query fails the logs report the following 现在,如果查询失败,日志将报告以下内容

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

If the query succeeds it returns the data as expected. 如果查询成功,它将按预期返回数据。 Here is the function 这是功能

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;
    }
}   

Thanks in advance for your help 在此先感谢您的帮助

Update 更新

That previous error I posted may have been related to an issue I had with my VM and cassandra crashing, either way, I still need to check for empty results. 我发布的先前错误可能与我的VM和cassandra崩溃有关,无论如何,我仍然需要检查是否为空。

Thanks 谢谢

Update 更新

Following the suggestions posted I ended up doing the following 按照发布的建议,我最终做了以下工作

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;
    }
}

Thanks for the suggestions 谢谢你的建议

use try catch : 使用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.

相关问题 datastax php 驱动程序的 Cassandra Prepared Statements 错误 - Cassandra Prepared Statements error with datastax php driver Datastax - Cassandra php-driver:未捕获的Cassandra \\ Exception \\ LogicException: - Datastax - Cassandra php-driver: Uncaught Cassandra\Exception\LogicException: 如何在Windows上为Cassandra安装Datastax-PHP驱动程序? - How do I install Datastax-PHP driver for Cassandra on Windows? 无法使用Datastax PHP Driver连接到远程Cassandra集群 - Unable to connect to remote Cassandra Cluster using Datastax PHP Driver Apache Cassandra 2.1.11群集故障转移不适用于Datastax PHP驱动程序 - Apache Cassandra 2.1.11 cluster failover does not work with datastax php driver 从php shell命令运行Cassandra(使用datastax php-driver) - running Cassandra from php shell command (using datastax php-driver) 如何在 PHP 中通过 CQL(Cassandra DataStax PHP DRIVER)修改或替换包含“LIKE”和“bindValue”的 SQL 查询? - How to modify or replace in PHP my SQL query containing "LIKE" and "bindValue" by CQL (Cassandra DataStax PHP DRIVER)? WAMP中的Datastax Cassandra PHP扩展 - Datastax Cassandra PHP extension in WAMP 如何在 Ubuntu 14.04 中使用 XAMPP 为 PHP Apache Cassandra 本地服务器安装和连接 DataStax 驱动程序 - How to install and connect DataStax Driver for PHP Apache Cassandra local server with XAMPP in Ubuntu 14.04 Datastax Cassandra PHP驱动程序:在准备好的语句中使用timeuuid时出现“无效值类型”异常 - Datastax Cassandra PHP Driver: “Invalid value type” exception when using timeuuid in prepared statement
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM