【问题标题】:PHP SQL query returns 'unknown colum' when string data type字符串数据类型时 PHP SQL 查询返回“未知列”
【发布时间】:2017-06-23 10:04:32
【问题描述】:

我在查询数据库时遇到问题。我已经提供了环境,所以我不能改变。这是一个 Joomla,我正在尝试适应它以能够使用数据库。

我创建了查询,当它们是数字时,我得到了正确插入的数据,但是如果我输入一个字符串,它会返回“未知列”。

这可能是单引号或双引号以及如何解释 PHP 代码的问题,但我看不到它,我来看看是否有人可以帮忙。

这是我要添加的 PHP 代码。由 joomla 提供的 JDatabase 表达式支持。

// Get a db connection.
$db = JFactory::getDbo();

// Create a new query object.
$query = $db->getQuery(true);

// Insert columns.
$columns = array("De", "Para");

// Insert values.
$data = $_POST['form'];
$de = $data[De];
$para = $data[Para];

$values = array($de, $para);

// Prepare the insert query.
$query
    ->insert($db->quoteName('referencias'))
    ->columns($db->quoteName($columns))
 // ->values($de, $para);

  ->values(implode(',', $values));

// Set the query using our newly populated query object and execute it.
$db->setQuery($query);
$db->execute();

如您所见,我正在尝试使用表单的 2 个字段(列)。如果我在其中一个字段中输入“asfasd”并发布它返回的表单:

“字段列表”中的未知列“asfasd”

但如果我输入一个数字,它只会将寄存器添加到数据库中。

编辑:SQL 数据库中的数据类型为“varchar”。

提前致谢。

【问题讨论】:

  • db 中的列设置为数字?
  • @Syfer 设置为 varchar

标签: php joomla


【解决方案1】:
$values = array($de, $para);

假设De = 3Para = asd

$values_str = implode(',', $values);

$values_str 将是 3','asd

$values_str = "'" . $values_str . "'"; \\<--This is missing step

现在,$values_str 将变为 '3','asd'

.
.
.
->values($values_str);

我不知道你为什么要通过内爆值来创建一个字符串。但是,如果你愿意,你必须在两端加上引号。

【讨论】:

  • 哦,抱歉,我没有 ' 但我在尝试时忘记更改它以便在此处发布。正是我有 $de = $data[De]; $para = $data[Para];尝试你现在的目的。并返回相同的错误。非常感谢你。
  • 您能否提供DePara 列的数据类型?我想,如果该字段的数据类型是数字,则不应将其用单引号括起来,这是您目前通过代码中的 implode 所做的。
  • 在 SQL 数据库中声明为 varchar。我将信息添加到帖子中。谢谢你。
  • 非常感谢您的回答。它有助于理解引号和双引号的情况。从那我会修改代码,看看我是否可以在不使用 implode 的情况下按照您的建议进行操作。 (我必须说我复制了那部分代码,现在你说在那里使用它没有多大意义)非常感谢,你帮助我知道为什么它真的失败了。它已经不能完全使用你的代码,但它会。
  • 感谢您的反馈,很高兴我的回答帮助您解决了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-02
  • 1970-01-01
  • 2016-02-12
  • 1970-01-01
  • 2011-02-20
  • 2010-12-08
  • 1970-01-01
相关资源
最近更新 更多