2017-10-31 6 views
1

私は電報のPHPボットを書いていますが、私はSQL SELECT文でこの問題を解決していません。ここ
はスクリプトです:SQL SELECT文がPHPで動作しません

$chat_id = $update->message->chat->id; 

$check_user = $con->query("SELECT * FROM Users WHERE chat_id='".$chat_id."'"); 
if($check_user->rowCount() > 0){ 

    $user_data = $check_user->fetchAll(); 
    $user_status = 'active user'; 
}else{ 
    $user_status = 'new'; 
} 

チャットidは、私は、ユーザーのプロファイルから取得し、それがデータベースかに存在するかどうかをチェックする整数VARです。何があっても、そのチャットIDがデータベースに既に存在していても、常にuser_statusを 'new'に設定します。

私はユーザ名をデータベースにも格納しています(これは文字列です)ので、この非常にSQL SELECTをユーザ名で起動しました。

どうしたのですか?
update:私は 'mysqli'を試しましたが、残念ながら私は同じ結果を得ています。

+0

これは正しいですか? – bassxzero

+0

@bassxzero 'fetchall()' - > PDOだと思います。 –

+0

@MasivuyeCokile PDOは、多くのデータベースエンジンのラッパーです。 – bassxzero

答えて

1

ほとんどのデータベースでは、PDOStatement :: rowCount()はSELECT文の影響を受ける行の数を に戻しません。代わりに PDO :: query()を使用して、目的のSELECTステートメントと同じ 述部を持つSELECT COUNT(*)ステートメントを発行し、 PDOStatement :: fetchColumn()を使用して を返す行数を取得します。これにより、アプリケーションは正しい処理を実行できます。

チェックこのlinkあなたは*

詳細をお知りになりたい場合はchat_idが整数である場合は、あなたのクエリから単一引用符を削除する必要があります

$chat_id = $update->message->chat->id; 

$check_user = $con->query("SELECT * FROM Users WHERE chat_id = $chat_id"); 
if($check_user->fetchColumn() > 0){ 

    $user_data = $check_user->fetchAll(); 
    $user_status = 'active user'; 
}else{ 
    $user_status = 'new'; 
} 
+2

それは違いはありません。 – chris85

+0

これがmysqlの場合、 '1 '(文字列)を' 1'(int)にキャストします。だから違いはありません。 – bassxzero

+0

私はまだ同じ結果を得ています! – HamidR

0

あなたのid

からの引用やドットを削除します
$check_user = $con->query("SELECT * FROM Users WHERE chat_id='$chat_id'"); 
+0

これはmysqlの場合は '1 ' (文字列)を '1'(int)に変更します。だから違いはありません。 – bassxzero

+0

ええ、彼はPDOを使用しているので、これはうまくいくはずです –

+1

私はあなたのコードが彼と全く同じであると言っています。 – bassxzero

1

rowCount()は、最後のDELETE、INSEの影響を受ける行の数を返します。 RT、またはUPDATEステートメントを実行することができます。

rowCount()はselectステートメントでは本当に信頼性がありませんが、私はあなたが選択してから、PDOStatement :: fetchAllを使用してすべての結果セット行を含む配列を返し、あなたのステータスをゼロよりも高く設定してください。

<?php 
$chat_id = $update->message->chat->id; 

$check_user = $con->prepare("SELECT * FROM Users WHERE chat_id = ? "); 
$check_user->execute([$chat_id]); 
$user_data = $check_user->fetchAll(); 

if (count($user_data) > 0) { 

    $user_status = 'active user'; 
}else{ 

    $user_status = 'new'; 
} 
+0

まだ同じ結果! – HamidR

+0

@HamidRは確かにそのIDを持っていますか? –

+0

ええと、私はそれを印刷することができ、スクリプトで何度も使用しています。 – HamidR

関連する問題