【问题标题】:Strings differents but equals in php字符串不同但在php中相等
【发布时间】:2015-12-22 05:08:04
【问题描述】:

我正在使用 Eclipse 编辑器。我在 vtiger 5.4 中编程。在我的文件 config.inc.php 中,变量 $default_charset 设置为

$default_charset = 'UTF-8';

我正在尝试使用下一个变量在 mysql 中进行 sql 查询

$sql = "select cod_dpto from vtiger_ubi where dpto='" . $dpto . "'";

当我打印变量$dpto 时,我得到"SAÑA",但是查询mysql 的执行

$adb->query ( $sql );

不起作用。但是当我将查询修改为:

$sql = "select cod_dpto from vtiger_ubi where dpto='SAÑA'";

指令

$adb->query ( $sql );

返回我需要的值。

请您帮帮我,如何转换我的变量$dpto 以使 sql 查询正常工作。

编辑

我尝试使用下面的代码进行查询,没有 vtiger,我得到了 0 个结果,这两个案例有变量并写了 'SAÑA'

$servername = "localhost";
$username = "root";
$password = "peru2006";
$dbname = "consuladoperurio_com_br_2";
$port = "3306";

// Create connection
$conn = new mysqli ( $servername, $username, $password, $dbname, $port );
// Check connection
if ($conn->connect_error) {
die ( "Connection failed: " . $conn->connect_error );
}
$sql = "select cod_dpto from vtiger_ubigeo where dpto='$dpto'";
echo $sql;
$result = $conn->query ( $sql );
if ($result->num_rows > 0) {
// output data of each row
while ( $row = $result->fetch_assoc () ) {
    echo "id: " . $row ["cod_dpto"] "<br>";
}
} else {
echo "0 results";
}
$conn->close ();

【问题讨论】:

  • 变量$dpto中的数据来自哪里?邮政?数据库?
  • mb_detect_encoding($dpto); 返回什么?
  • @Juan 在将其插入查询之前尝试utf8_encode($dpto)
  • @Juan iconv('ASCII', 'UTF-8//IGNORE', $dpto); 似乎是我刚刚发现的更好选择:*.com/questions/4983989/…
  • @ajmedway $dpto 填充了一个查询。

标签: php vtiger


【解决方案1】:

您的 Select 语句如下所示:

$sql = "select cod_dpto from vtiger_ubi where dpto='".SAÑA."';

您可能希望它看起来像:

$sql = "select cod_dpto from vtiger_ubi where dpto='$dpto'";

注意没有 concat 运算符,变量只用单引号括起来。

【讨论】:

  • 他正确地转义了变量,你的第一行不是它的实际解析方式。
  • @Kisaragi 谢谢,但我测试过,但不起作用
  • @pbond 是对的,这不是使用 php 字符串文字时的工作方式,它将被解析为:dpto='SAÑA'
  • @Juan 我只是指出 pbond 是正确的,最重要的是它不是真正的工作原理