2016-05-20 5 views
0

私は、PDOクエリを経由して結果をフェッチするこの小さな問題があります。取り出した値(CAST(.. AS DATETIME))PHPのエラー出力に出力

$result = $db->prepare("SELECT MIN(CAST(Tstart AS DATETIME)) , MAX(CAST(Tend AS DATETIME)) , FROM TimeBase 
WHERE Daynr = '131'"); 
$result->execute(); 
$keep = $result->fetch(); 

echo $keep['Tstart']; 
echo $keep['Tend']; 

がエラーを生成します未定義のインデックス:T開始は
未定義のインデックス:MySQLの構文自体は、私はそれを直接実行した結果を返します

傾向があります。 PDOはMIN(CAST(.. AS DATETIME))がなければ何の問題も生じていないので、問題はこの構文で何かをしなければならないと確信していますが、php変数(またはこの例ではecho)にフェッチする正しい方法を見つけることができません。 。

私の質問は、この場合のPHP変数としてフェッチされた行を理解する正しい方法は何ですか?

そこから、このコードを使用してdatetime行の時刻としてフォーマットすることができますか?

$Start_Time = $keep['time(Tstart)']; 
+0

どのデータ型がTstartですか? – scaisEdge

+1

SQLがTstart列またはTend列のエイリアスを設定していません。これらの列で集計関数を実行しているので、名前なしで返されます。 – WillardSolutions

+0

'var_dump($ keep)'には何が含まれていますか?私の推測では、おそらくあなたの選択ステートメントに列別名を与える必要があります。 – Quantastical

答えて

1

のための適切なエイリアスを必要とすることができますが、位置配列として結果を扱うことができ、次のいずれか

echo $keep[0]; 
echo $keep[1]; 

したり、列の別名を与え、その結果を処理します連想配列:

$result = $db->prepare("SELECT MIN(CAST(Tstart AS DATETIME)) AS tstart, 
MAX(CAST(Tend AS DATETIME)) AS tend 
FROM TimeBase 
WHERE Daynr = '131'"); 
$result->execute(); 
$keep = $result->fetch(); 

echo $keep['tstart']; 
echo $keep['tend']; 

注:from節の前に冗長なカンマがあることに注意してください。

+0

完全に動作します。これをとてもうれしく説明してくれてありがとう – waterdripz

0

は、あなたがこの

SELECT MIN(CAST(Tstart AS DATETIME)) as t1 , 
    MAX(CAST(Tend AS DATETIME)) as t2, 
    FROM TimeBase 
    WHERE Daynr = '131'" 


echo $keep['t1']; 
echo $keep['t2']; 
0

変更は、あなたは、SQL:

$result = $db->prepare("SELECT MIN(CAST(Tstart AS DATETIME)) as Tstart , 
      MAX(CAST(Tend AS DATETIME)) as Tend FROM TimeBase 
      WHERE Daynr = '131'"); 
$result->execute(); 

列は、名前のない返送されていたので、あなたは名前によってそれらを参照することができませんでした。