0

以下は私のアプリケーションのコードスニペットです。私はPDOに非常に慣れていないので(今日から理解し始めたように)、少し混乱していることを覚えておいてください。

これで、ifステートメントは1を返します。これは予想されます。ただし、設定後は予期しないことが起こり$nodeます。設定後はFALSEのように見えます。何?ほんの数行前に、私のfetch()試みは期待値を返したので、何が起こっているのかわかりません。

$sth = $dbh->prepare("
    SELECT *, COUNT(*) AS num_rows
    FROM flow
    INNER JOIN flow_strings
        USING(node_id)
    WHERE
        (
            parent = 0
            OR parent = :user_flow
        )
        AND source = 0
        AND string = :input
    ");
$sth->bindParam(':user_flow', $user->info->flow);
$sth->bindParam(':input', $input_sentence);
$sth->execute();

// If node exists.
if ($sth->fetch()->num_rows > 0)
{
    // Get the information for the node.
    $node = $sth->fetch();

[...] etc

カーソルが前に移動し、読み取るものがなくなったと推測しているので、FALSEが返されます。確かに、これを回避する方法はあります!私が実行するとき$sth->fetch()->num_rows、私は何も変更しようとはしていません-私はただ値を読み取ろうとしているだけです。回避策はありますか?私は何か変なことをしていますか?私はとても迷っています、ハハ。

ありがとう!:)


編集:

Notice: Undefined variable: node_count ... on line 56

// Retrieve all child nodes under $parent.
$node_query = $dbh->prepare("
    SELECT *, COUNT(*) AS num_rows
    FROM flow
    WHERE parent = :parent
    ");
$node_query->bindParam(':parent', $parent);
$node_query->execute();

// If child nodes exist.
if ($node_count = $node_query->fetch() && $node_count->num_rows > 0) // Line 56
{

[...] etc
4

1 に答える 1

2

データ配列をいくつかの変数に割り当て、それ以上フェッチせずに使用します。

if (($row = $sth->fetch()) && $row->num_rows > 0) {
    // work with $row here
}
于 2012-06-14T23:36:54.110 に答える