gpt4 book ai didi

php - SQL查询的奇怪问题

转载 作者:行者123 更新时间:2023-11-29 03:46:11 24 4
gpt4 key购买 nike

我已将问题编辑得更加具体和清晰

我在独立的 PHP 文件中有以下代码:

$conn = mysql_connect("localhost", "", "");

mysql_select_db("name", $conn);

$result = mysql_fetch_array(mysql_query("SELECT EVENT_PRIVATE FROM events WHERE EVENT_ID = 68"));

var_dump($result);

结果为NULL

但是,如果我将完全相同的查询复制到 phpMyAdmin,您会看到 EVENT_PRIVATE 的值为 1。

enter image description here

我只有一个数据库,所以我肯定使用同一个数据库,而且,如果我选择不同的列,我可以看到正确的值。

我不明白,你呢?

最佳答案

我已经在 PHP 和 MySQL 的匹配版本上尝试过这个,PHP“mysql”函数处理位字段的方式似乎有些奇怪,或者至少是我不明白的事情。它确实看起来有点像一个错误。它像我在“mysqli”扩展中所期望的那样工作。这是我尝试过的:

<?php
// mysql:
$conn = mysql_connect('localhost', 'test', 'test');
mysql_select_db("test", $conn);
$result = mysql_fetch_array(mysql_query('SELECT EVENT_PRIVATE FROM test WHERE id = 2'));
var_dump($result);

/* Result:
array(2) {
[0]=>
string(1) ""
["EVENT_PRIVATE"]=>
string(1) ""
}
*/

// mysqli:
$mysqli = new mysqli('localhost', 'test', 'test', 'test');
$mysqli_result = $mysqli->query('SELECT EVENT_PRIVATE FROM test WHERE id = 2');
$result = $mysqli_result->fetch_array();
var_dump($result);

/* Result:
array(2) {
[0]=>
string(1) "1"
["EVENT_PRIVATE"]=>
string(1) "1"
}
*/

编辑:啊哈!

本书"High Performance SQL"说 'MySQL 将 BIT 视为字符串类型,而不是数字类型;当您检索 BIT(1) 值时,结果是一个字符串,但内容是二进制值 0 或 1,而不是 ASCII 值“0”或“1”。

我原以为 BIT 类似于 SQL Server 的“位”数据类型,它是为存储 bool 真/假 (0/1) 值而设计的单个位。然而,在 MySQL 中,它更像是一个位域——与 SQL Server 不同,您可以有一个 bit(8) 域,例如,它是八位长。 MySQL 有一个特定的“ bool ”类型来代替存储 bool 值。

我猜这是正在发生的事情的根源。请注意,mysql 结果返回的是一个字符串 (1)——这是一个单字符长字符串,不是空字符串,它应该是字符串 (0)。如果您查看该单个字符的值:

echo ord($result['EVENT_PRIVATE']); 
1

...那么它就是一个 ASCII 1!

所以,我想说发生的事情很可能是设计使然。 mysql 扩展非常直白地解释了位字段,并为您提供了一个字符串,该字符串在位级别对存储在 MySQL 字段中的实际位进行编码。 mysqli 扩展可能更友好一些,并将值转换为位的字符串表示形式。

如果你使用 mysql 和 mysqli 将 bit(8) 设置为 10101010...,我会留给你来试验会发生什么......

关于php - SQL查询的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4877109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com