【问题标题】:Query only returning 7 of 9 expected values查询仅返回 9 个期望值中的 7 个
【发布时间】:2015-04-27 00:29:58
【问题描述】:

我无法让 sql php/pdo 语句返回以下查询中的值。该查询返回 7 个值,但我希望返回 9 个。当我执行变量转储时,我看到它忽略了 news.ID 和 stories.ID 的值。

我有名为新闻和故事的表格。我不知道我的问题是与我的加入有关,还是我在将其弄乱的 bindparam 中的每个都使用 $ID (如果是这样,我应该使用什么来代替,因为它们在各自的表中都有列名 ID )。

$results2 = $dbh->prepare("select 
wp_users.ID,
wp_users.display_name,
stories.ID,
stories.SID,
news.ID,
news.WID,
news.text,
news.approved,
news.position
FROM news
LEFT JOIN stories on news.SID = stories.SID
LEFT JOIN wp_users ON news.ID = wp_users.ID
WHERE (stories.SID = $the_SID) AND (news.approved = 'N') 
AND (news.position= $cont) order by news.WID asc limit 10");

$results2->bindParam(':wp_users.ID', $user_ID, PDO::PARAM_INT); 
$results2->bindParam(':display_name', $display_name, PDO::PARAM_STR); 
$results2->bindParam(':stories.ID', $ID, PDO::PARAM_INT); 
$results2->bindParam(':stories.SID', $the_SID, PDO::PARAM_STR);
$results2->bindParam(':news.WID', $WID, PDO::PARAM_STR);  
$results2->bindParam(':news.ID', $ID, PDO::PARAM_INT); 
$results2->bindParam(':text', $text, PDO::PARAM_STR); 
$results2->bindParam(':approved', $f = N, PDO::PARAM_STR); 
$results2->bindParam(':position', $cont, PDO::PARAM_INT); 
$results2->execute();
$row2 = $results2->fetchAll(PDO::FETCH_ASSOC);

这里是 var 转储结果:

数组(7){ ["ID"]=>字符串(1) “1” > ["display_name"]=>string(9) “管理员” ["SID"]=>字符串(2) “77” > [“WID”]=>字符串(3)“236” > [“文本”]=>字符串(32)“sfkjsdjsdlfjsdkfjksdjfdsjfksfdks” > [“批准”]=>字符串(1)“N” [“位置”]=>字符串(2)“13” }

【问题讨论】:

    标签: php mysql pdo


    【解决方案1】:

    你必须区分ID,

    改成这样的

    $results2 = $dbh->prepare("select 
    wp_users.ID AS ID1,
    wp_users.display_name,
    stories.ID AS ID2,
    stories.SID,
    news.ID AS ID3,
    .....");
    

    因为你有3个ID的mysql只会显示一个

    【讨论】:

    • 我是否还要在 bindparam 中命名变量 $ID1 和 $ID2?
    • 不,你没有,但我建议你更好地形成你的查询。我发现他们读起来很困惑。如果您使用 bindparam,在查询中包含变量通常是不好的做法(除非它们是在您的代码中定义的,而不是由用户定义的)。
    猜你喜欢
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 2018-03-09
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    相关资源
    最近更新 更多