2017-01-10 30 views
0

私はslim-framework v2とphpを使用してjson outputs.Withを取得しています。このコードでは、この問題について説明しています。 mysqlテーブルはフォーマットが正しくないので変更できません。このような機能をこのようにしたのは、私が経験したことがないからです。 これを解決する最良の方法は何ですか?sqlコマンドで実行できるのであれば、メインループからこれらの関数を削除することができますか?ループ内の関数が悪いですか? ps:対象が間違っているかどうかを教えてください。エラー:クラスPDOのオブジェクトを文字列に変換できませんでした

テスト()顧客ID

function test($server, $user, $pass, $db) { 
    $result = array(); 
    $sql = "SELECT cid from tasks where total!=0"; 
    $db = newDB($server, $user, $pass, $db); 
    $stmt = $db->prepare($sql); 
    $stmt->execute(); 
    foreach ($stmt as $v) { 
    $result[] = ['cid'=> $v['cid'], 'test'=> toGet($server, $user, $pass, $db, $v['cid']), 'test2'=> toGet2($server, $user, $pass, $db, $v['cid'])]; 
    } 
    echo json_encode($result, JSON_FORCE_OBJECT); 
} 

およびその他の機能

function toGet($server, $user, $pass, $db, $id) { 
    $sql = "SELECT sum(`poso`) as posoe from `economics` where `custid`=:id and flag=0"; 
    $db = newDB($server, $user, $pass, $db); 
    $stmt = $db->prepare($sql); 
    $stmt->bindParam("id", $id); 
    $stmt->execute(); 
    $row = $stmt->fetch(PDO::FETCH_NUM); 
    return $row[0]; 
} 

function toGet2($server, $user, $pass, $db, $id) { 
    $sql = "SELECT sum(`poso`) as posoe from `economics` where `custid`=:id and flag=1"; 
    $db = newDB($server, $user, $pass, $db); 
    $stmt = $db->prepare($sql); 
    $stmt->bindParam("id", $id); 
    $stmt->execute(); 
    $row = $stmt->fetch(PDO::FETCH_NUM); 
    return $row[0]; 
} 

ためのメインループは、どうもありがとうございましたさ!

UPDATE:ErrorException コード: は(真の 'デバッグ'、)デバッグ$ APP->設定をオンに、最終的にはエラー タイプだ4096を メッセージ:クラスPDOのオブジェクトに変換することができませんでした文字列 ファイル:/var/www/api/newdb.php ライン:6

function newDB($host, $user, $pass, $db) { 
    $dbhost= $host; 
    $dbuser= $user; 
    $dbpass= $pass; 
    $dbname= $db; 
    $dbConnection = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass); 
    $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $dbConnection->query('set names utf8'); 
    return $dbConnection; 
} 

アップデート2:スリムconfに

include 'newdb.php'; 
require 'Slim/Slim.php'; 
\Slim\Slim::registerAutoloader(); 
$app = new \Slim\Slim(); 
$app->config('debug', true); 
$app->response->setStatus(200); 
$app->contentType('application/json; charset=utf-8'); 
$app->get('/test/:server/:user/:pass/:db', 'test'); 
$app->get('/', function() use($app) { 
    $app->response->setStatus(200); 
    echo "Welcome!"; 
}); 
$app->run(); 
+0

うーん...何行はこのエラーを生成してデータを取り出すことができますか? – AbraCadaver

+0

それは6行目です、私の質問が更新されました – UrL

答えて

0

Freenodeの男のMYSQLクエリでこの問題が解決されました。

- Reconnecting on db for each query was bad. 
- toGet() toGet2() removed 

私は単一のクエリ

SELECT t1.custid as cid, sum(if(t2.flag=0,t2.poso,0)) as posoX, 
sum(if(t2.flag=1,t2.poso,0)) as posoY from tasks t1 
left join economics t2 on t2.custid=t1.custid and t2.flag in (0,1) group by t1.custid; 
関連する問題