Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP mysqli查询返回结果“;1“;关于连接_Php_Mysql - Fatal编程技术网

PHP mysqli查询返回结果“;1“;关于连接

PHP mysqli查询返回结果“;1“;关于连接,php,mysql,Php,Mysql,我一直在尝试从php mysql中提取一些值,它返回了一个奇怪的结果“1”。它包含一个带有where子句的内部连接,一切正常,但当我尝试回显ID时,结果奇怪地是“1”,但我确信ID不是1。当我在MySQL CLI上运行相同的查询时,它会返回我所需要的内容,但在php中,它甚至不会说有错误 有趣的是,只有ID返回“1”,其他所有内容都返回正确的值。CLI上的ID是-“V8FBaMJT6bqPbpRutJgkRdc44S3Gz3H8VjW5iu5E4yhBlLA1/D8o+ecgmuy62lzlrx

我一直在尝试从php mysql中提取一些值,它返回了一个奇怪的结果“1”。它包含一个带有where子句的内部连接,一切正常,但当我尝试
回显
ID时,结果奇怪地是“1”,但我确信ID不是1。当我在MySQL CLI上运行相同的查询时,它会返回我所需要的内容,但在php中,它甚至不会说有错误

有趣的是,只有ID返回“1”,其他所有内容都返回正确的值。CLI上的ID是-
“V8FBaMJT6bqPbpRutJgkRdc44S3Gz3H8VjW5iu5E4yhBlLA1/D8o+ecgmuy62lzlrxb2skaxbouwaiqxqv+3osodtuhey4ibpsy91x8jhngfjowm2mwqymwmxmtbmtu5yju5nzu2ngm3otc1yq=”
,因此它不可能等于“1”

现在,在结果中-第一个是奇怪的“1”,第二个是时间戳。 此外,如果我删除内部连接部分,并执行一个简单的
SELECT*FROM框
,它将完美地返回ID。我还试着做了一个
stmt->num_rows
,它返回“0”。也许我错过了一些明显的东西

我刚开始在php mysql中使用连接,在过去的两个小时里,这对我来说是一个很大的难题,非常感谢您的帮助。
谢谢。

问题是您使用了
SELECT*FROM…
,它返回您正在使用的任何表中的每一列。这不是你想要的始终写入要从查询中读取的列

在这种情况下,结果集中有多个
Id
列,一个来自表
,另一个来自表
交互
$post['id']
的值将包含
交互
表的值。因此,通过编写以下内容更改SELECT查询:

SELECT box.id, box.time_created FROM ...

另外,不要使用
eval()
函数ever。您可能希望切换到具有更清晰API的PDO(该函数以数组形式返回下一行)

经过几个小时的研究,我找到了一个工作示例,它工作得很好。 其他人将来可能会面临同样的问题并犯错误,因此我在这里发布了一个问题的答案:


问题:
  • 在两个联接表中具有相同的列名
  • 第一个问题是表交互的列名
    id
    与表的列名相同。由于我使用了
    SELECT*FROM-box
    交互的内部连接,因此它基于第二个
    id
    返回结果,该id是交互而不是box

  • 在显示记录计数之前不存储结果
  • 其次,问题是结果没有存储为,这是一个愚蠢的错误


    解决:
    • 对列报告进行寻址
    因此,首先我决定更改
    id
    的表interactions的列名,并将其更改为
    inter\u id
    ,以避免进一步的冲突。虽然这不是一个非常明智的步骤,但它将在未来避免此类愚蠢的错误。然后,正如前面的答案所指出的,我必须指定要输出的结果的列名,而不是使用
    SELECT*
    ,因此我将其更改为

                  SELECT box.id, box.time_created FROM box 
                  INNER JOIN interactions 
                  ON box.u_id=interactions.actorid 
                  WHERE interactions.actorid=? 
                  AND interactions.type IN ('1','5') 
                  ORDER BY box.time_created";
    
    这基本上解决了第一个问题

    • 计算结果的数量
    第二个是关于添加
    $stmt->store_result()echo$stmt->num_行之前,它完美地工作了并且它完美地显示了结果


    再次感谢您。

    您有任何PHP错误吗?没有,没有错误@MatthewHerbstHmm,我觉得您应该有。您在绑定后定义了
    b
    ,因此我怀疑
    interactions.actorid
    是否在
    $stmt->bind_param(“s”,$b)中
    实际上具有正确的值。我在绑定它后尝试过,但无效。这肯定是正确的值,我运行了相同的查询,用
    $b
    的值重放了“?”,它返回了我想要的结果。@coderdutewodee为什么要这样使用eval<代码>$station=“\$stmt->bind\u result($statementParams);”;eval($statment)这毫无意义…是的,我知道了。但是如何解决显示行数的问题呢?输出按需要返回,但当
    echo
    -ing
    $stmt->num\u行时,我仍然得到0
    @CoderDudeTwodee如上所述,您必须致电。同样,我已经自己解决了我的问题,但无论如何,谢谢。:)
                  SELECT box.id, box.time_created FROM box 
                  INNER JOIN interactions 
                  ON box.u_id=interactions.actorid 
                  WHERE interactions.actorid=? 
                  AND interactions.type IN ('1','5') 
                  ORDER BY box.time_created";