PHP MYSQL相同编号、相同类型、不同结果

PHP MYSQL相同编号、相同类型、不同结果,php,mysql,pdo,Php,Mysql,Pdo,我有一个终生都无法解决的问题。对我来说这毫无意义,所以我想我显然错过了什么,我只是看不到它是什么 我有一个简单的脚本 $pid = isset($_GET['id']) ? $_GET['id'] : ''; $pcjid = delete_user($pid); try { $sth = $dbh->prepare ("SELECT aid_id FROM tbl_personcompanyitem_join WHERE pcj_id = $pcjid"); $sth

我有一个终生都无法解决的问题。对我来说这毫无意义,所以我想我显然错过了什么,我只是看不到它是什么

我有一个简单的脚本

$pid = isset($_GET['id']) ? $_GET['id'] : '';

$pcjid = delete_user($pid);

try {
    $sth = $dbh->prepare ("SELECT aid_id FROM tbl_personcompanyitem_join WHERE pcj_id = $pcjid");
    $sth->execute ();
    while($row = $sth->fetch(PDO::FETCH_BOTH)) {
        $aid = $row['aid_id'];
    }

} catch (PDOEXCEPTION $e) {
    $err++;
    write_to_log($e);
}

delete_lot($aid);
出于某种原因,在使用变量时,我的sql查询不会返回任何结果,但如果我在其中硬编码一个数字,则会返回任何结果。我已经验证了数据在要返回的数据库中,并且通过写入一个日志文件

  • 变量$pid有一个值,是一个有效值
  • 当delete_user()函数被调用时,变量$pcjid有一个值 返回
  • sql查询显示$pcjid所在的值
  • 变量$pcjid是一个整数,应该是
  • 变量$aid未定义
  • delete_lot()传递了一个空值
  • 如果我在那里硬编码一个数字,即使 如果它与$pcjid所说的数字相同
  • 我已经为此奋斗了两天,看不出我错过了什么。我希望有一双新的眼睛能看到我看不到的东西,并对这件事有所了解

    提前谢谢

    更新:为了回应评论,我还尝试了绑定:

        $sth = $dbh->prepare ("SELECT aid_id FROM tbl_personcompanyitem_join WHERE pcj_id = :id");
        $sth->bindParam (":id",$pcjid);
        $sth->execute ();
    
    但同样的结果

    更新:针对andrewsi的评论,以下是更多的结果:

    测试1: 手动设置:$pcjid=19; 将此添加到while:

    while($row = $sth->fetch(PDO::FETCH_BOTH)) {
        write_to_log("rowid=" . $row['aid_id']);
        write_to_log('row=' . $row);
        $aid = $row['aid_id'];
    }
    
    我得到以下结果:

    • pcjid=19
    • rowid=25
    • 数组到字符串的转换
    • 行=数组
    • 援助=25
    测试2:当我执行相同的测试,但使用一个我知道将为$pcjid返回值19的用户时,我会得到以下结果:

    • pcjid=19
    • 未定义变量:aid
    • 援助=
    因此,当使用一个函数返回结果时,即使它与我硬编码的数字相同,它也不会进入while循环

    更新:
    在使用上面的测试2中所做的操作时,我也尝试了这个方法

    $r = $sth->execute ();
    write_to_log('r=' . $r);
    
    我得到:r=1

    更新: 所以为了好玩,我尝试了更多的东西

  • 我试着把数字转换成字符串,然后再转换成一个字符串 整数,包括函数返回的数字和 硬编码号码。同样的结果
  • 我尝试将0添加到数字中,两个都是从返回的数字 函数和硬编码编号。同样的结果
  • 我把它们都转换成一个字符串。同样的结果

  • 说真的,有人能看到这里发生了什么吗?它快把我逼疯了。

    您需要在准备语句后将参数绑定到语句:

    $sth = $dbh->prepare ("SELECT aid_id FROM tbl_personcompanyitem_join WHERE pcj_id = ?");
    $sth->bind_param("i", $pcjid)
    $sth->execute ();
    

    请参见

    u缺少参数绑定刚刚尝试绑定,但相同result@biggunn-代码是否在循环期间进入您的
    ?添加一个回音以进行检查。我还建议检查
    execute
    调用的返回值,以确保它没有返回false。当我硬编码一个数字时,它会进入while循环,而不是在使用变量时。我将测试execute的返回值。@biggunn-在
    tbl\u personcompanyitem\u join
    中,
    pcj\u id
    列的类型是什么?我看不出有什么原因会像你所描述的那样失败,所以我不得不承认我在抓救命稻草。