【问题标题】:Php query don't work with mysqli_query() but work on php my adminphp 查询不适用于 mysqli_query() 但适用于 php my admin
【发布时间】:2021-04-23 22:08:45
【问题描述】:

我正在尝试通过 mysqli_query() 在 php 上使用此查询:

$query = 
    ("
                SELECT
                    COALESCE(
                        (
                            SELECT
                                indicadores_respostas.resposta_text
                            FROM
                                indicadores_respostas
                                LEFT JOIN indicadores_secoes_itens ON indicadores_secoes_itens.id = indicadores_respostas.id_secao_item
                            WHERE
                                indicadores_respostas.id_indicador = indicadores.id
                                AND indicadores_secoes_itens.titulo = 'Longitude'
                        ),
                        (
                            SELECT
                                cidades.longitude
                            FROM
                                cidades
                                INNER JOIN indicadores_respostas
                                LEFT JOIN indicadores_secoes_itens ON indicadores_secoes_itens.id = indicadores_respostas.id_secao_item
                            WHERE
                                indicadores.id = indicadores_respostas.id_indicador
                                AND cidades.cidades_id = CAST(indicadores_respostas.resposta_text AS SIGNED)
                                AND indicadores_secoes_itens.titulo = 'Cidade'
                        )
                    ) AS Longitude
                FROM
                    indicadores
                    LEFT JOIN indicadores_respostas ON indicadores_respostas.id_indicador = indicadores.id
                    LEFT JOIN indicadores_secoes_itens ON indicadores_secoes_itens.id = indicadores_respostas.id_secao_item
                WHERE
                    indicadores_secoes_itens.titulo = 'Nome da capacitação' OR indicadores_secoes_itens.titulo = 'Instituição'
    ");

    $result = mysqli_query($connection, $query);

但在 PHP 中它返回 0 行,但在 PHP 我的管理员上完全相同的查询,在同一个数据库中,返回 2 行

有人知道我做错了什么吗?

这是我的连接字符串:

mysqli_report(MYSQLI_REPORT_STRICT);
try {
    $connection = mysqli_connect("localhost", "root", "", "test_db", "3308");

OBS: $Result 正在返回 true,如果我做了一些更“普通”的查询,比如

SELECT * FROM Cidades

正常工作

更多信息:

不管有没有try catch,我的回报是

【问题讨论】:

  • 请同时发布数据库代码的其他部分。我的想法: mysql_query 返回一个 0 行的 mysql_result 对象是否返回 FALSE?还有一个 PHP 错误?如果连接失败或 php 文件中出现其他问题,您将得到 FALSE 并出现 PHP 错误。你检查了吗?你检查了 error.log 吗?如果结果应该为假,请同时检查 mysqli_error()。
  • mysqli_report(MYSQLI_REPORT_STRICT); 什么都不做。你需要mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
  • 我已经用这些信息完成了我的问题,但无论如何,是的,我检查了,0 个错误,$result 是真的,如果我写了一个较小的查询,比如 select * from cidades,就可以了跨度>
  • 不,不是表/列排序规则。我的意思是连接字符集
  • 您是否阅读了手册中的示例? php.net/manual/en/mysqli.construct.php 它们显示了正确建立连接所需的 3 个步骤。

标签: php sql mysqli


【解决方案1】:

使用 mysqli 连接的正确方法包括 3 个步骤:启用错误报告、创建 mysqli 类的实例和设置正确的字符集。

取自PHP.net 的示例演示了这些步骤:

<?php

/* You should enable error reporting for mysqli before attempting to make a connection */
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

$mysqli = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');

/* Set the desired charset after establishing a connection */
mysqli_set_charset($mysqli, 'utf8mb4');

大多数情况下,正确的字符集是utf8mb4,但您可能使用的是不同的字符集。如果您仍在使用已弃用的 utf8,我建议您尽快更改它。

正确的字符集确保 MySQL 理解客户端使用的字符编码。当使用不同的字符集时,像'Nome da capacitação' 这样的短语可能会以不同的方式编码,如果你使用不正确的字符集,MySQL 将不会返回匹配的结果。您必须确保连接字符集与表排序规则中使用的字符集匹配。作为最佳实践,我强烈建议您在任何地方都坚持使用utf8mb4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 2021-03-23
    • 1970-01-01
    相关资源
    最近更新 更多