【问题标题】:Could the type of sql data type have an impact on the composition of a sql query?sql数据类型的类型会对sql查询的组成有影响吗?
【发布时间】:2018-12-19 10:12:19
【问题描述】:

我编写了一些 sql 查询来从 postgresql 数据库生成数据。当我尝试搜索一个单词时(例如 work)它可以工作,但是如果我对 bigint(例如 45)执行相同的操作,我没有得到任何结果。我收到以下错误:警告:pg_num_rows() 期望参数 1 是资源,在 require() 中给出布尔值。 参见数据库的小提琴 它可能与它是一个 bigint 的事实有关吗?是否有不同的定义。

$table = "test";
$field="\"number\"";
$text = "45"; # $text = 45;
$query = "SELECT DISTINCT \"number\", \"word\", \"sentence\", lower(\"sentence\") FROM \"" . $table . "\" WHERE ";
$query = $query . $field . " ~* '" . $text . "' ";
echo $query;

$recordset = pg_query($connection, $query);
if($recordset)
{
    $row = pg_numrows ($recordset);
    var_dump($row);
}

表测试定义:

CREATE TABLE "test" (
  "id" SERIAL,
  "number" BIGINT NOT NULL,
  "word" VARCHAR,
  "sentence" VARCHAR
);
INSERT INTO test (id, number, word, sentence) VALUES
    (1, "451", 'make', 'I will make you great'),
    (2, "45", 'new', 'Is this new ?'),
    (3, "57", 'work', 'I always work very hard'),
    (4, "48", 'sell', 'Are you going to sell your house'),
    (5, "781", 'feel', 'Do you feel well?')

【问题讨论】:

  • 您能否请edit 您的帖子并添加$query 中的SQL?还请添加表test的定义。奇怪的是,您尝试将具有建议名称 number 的字段与期望列 number 具有字符串类型的查询进行比较。此外,您的代码有一个错字 - 您设置了 $talbe,但您在查询字符串中使用了 $table
  • 添加 $query 的 SQL 是什么意思?
  • 您的代码中有echo $query;。它输出什么?请将该输出添加到您的 pst。
  • 它不提供任何输出。我刚刚收到错误消息。
  • 我曾经遇到过同样的问题。所以我将 bigint 更改为 varchar。然后使用 $text = 45;

标签: php sql postgresql


【解决方案1】:

你说它工作的SQL小提琴使用MySQL,所以在这里无关紧要。

这不起作用并导致错误,因为 PostgreSQL 没有从数字到字符串数据类型的隐式类型转换,反之亦然。原因是在函数和运算符重载的情况下,这会在某些情况下产生歧义和令人惊讶的行为。

您的解决方案是使用类型转换:

... WHERE CAST(number AS text) ~* '^45.*'

【讨论】:

  • 不,这无济于事。不是常量,而是number ~* 导致了问题。
  • 那么它不可能是PostgreSQL。您正在尝试的确切 SQL 字符串是什么?
  • .CAST ($field AS text) 。 " ~* '" 。 $文本。 "' => $text = "^".$text.".*"; => 我收到一个错误,因为他不认识 ^ 和 * 符号。但我找到了一个解决方案,只需将 bigint 更改为 varchar 和然后它起作用了。
猜你喜欢
  • 1970-01-01
  • 2020-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-21
相关资源
最近更新 更多