0

私は理解できないこの問題を抱えています、私は次のようにDBに問い合わせます:

$stmt = $this->pdo->prepare('SELECT customer_name FROM active_users WHERE a_id= ?');
$stmt->execute(array($a_id));
$c_name = $stmt->fetch(PDO::FETCH_OBJ);
API::writeToLog('CMD=leave , Customer_Name = ' . $c_name->customer_name, $customer_name);

これ:$ c_name-> customer_nameは次のエラーを出します:

Notice: Trying to get property of non-object

データベースを反復処理するにはどうすればよいですか。また、fetchとfetchAllの違いは何ですか。どちらを使うべきですか?

これはDBスキーマです。

+---------------+--------------+------+-----+---------+-------+
| Field         | Type         | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| a_id          | varchar(40)  | NO   | PRI | NULL    |       |
| token         | varchar(64)  | NO   |     | NULL    |       |
| nick          | varchar(255) | NO   |     | NULL    |       |
| ip            | varchar(32)  | NO   |     | NULL    |       |
| customer_name | varchar(255) | YES  |     | NULL    |       |
+---------------+--------------+------+-----+---------+-------+

ありがとう!

編集:タイプミスを修正しました。

4

2 に答える 2

3

レコードが存在するかどうかを確認するには、if 条件を追加する必要があります。

$stmt = $this->pdo->prepare('SELECT customer_name FROM active_users WHERE udid = ?');
$stmt->execute(array($udid));
if ($c_name = $stmt->fetch(PDO::FETCH_OBJ)) {
  API::writeToLog('CMD=leave , Customer_Name = ' . $c_name->customer_name, $customer_name);
}

fetchAllの場合、一度にすべてのレコードを返します。

@Darragh が指摘したように、タイプミスがあり$c_nameます。

于 2012-05-29T10:58:24.083 に答える
0

打ち間違え?$cname->customer_name代わりにすべきではありません$c_name->customer_nameか?

編集

具体的には、戻りオブジェクトを$cname次のように割り当てています。

$cname = $stmt->fetch(PDO::FETCH_OBJ);

しかし、あなたは$c_name次の行で言及しています:

API::writeToLog('CMD=leave , Customer_Name = ' . $c_name->customer_name, $customer_name);
于 2012-05-29T11:00:12.027 に答える