SQL表单提示"从数据类型varchar转换为int时出错"

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL表单提示"从数据类型varchar转换为int时出错"相关的知识,希望对你有一定的参考价值。

1、varchar是字符串类型,而int是数字整型。varchar类型可以存储任意字符,而int只能存储数字整型所以会报错;
2、你可以将int类型转换为varchar类型,因为varchar可以存储任意的字符;例如:123(一百二十三)位int类型,当你将123转为varchar类型之后就变成了123(一二三)。如果你讲abc
varchar类型转换为abc
int类型时是无法转换的;
参考技术A 楼上说的这个不属于网站页面代码问题,是网站后台代码问题。应该是由数据库表里面字段类型为varchar的数据取出来转换成int是出现错误,这种情况一般都是字段类型为varchar的数据不是数字造成的

Joomla 表单字段类型 sql="....WHERE 条件"?

【中文标题】Joomla 表单字段类型 sql="....WHERE 条件"?【英文标题】:Joomla Form field type sql="....WHERE condition"? 【发布时间】:2012-09-20 21:08:38 【问题描述】:

在 Joomla 2.5 中,如何在 SQL 查询中使用条件“WHERE”执行表单字段类型“SQL”?

例子:

<field name="catid" type="sql" query="SELECT id, title FROM #__table WHERE condition" />

joomla 文档中没有关于此的任何内容。我找到了这个链接,但它没有提到在 SQL 查询中使用 WHERE 条件的任何内容(http://docs.joomla.org/SQL_form_field_type)。

谁能告诉我这在 Joomla 中是否可行?

我有一张包含产品的表格和一张包含与品牌相关的商店的表格。如果我编辑一家商店,我想显示一个包含该商店品牌所有产品的组合框。那可能吗? SELECT * FROM #__products WHERE brand = 与我选择进行编辑的商店关联的品牌 ID 这可能吗?

我可以使用自定义表单字段来做到这一点 =)

http://docs.joomla.org/Creating_a_custom_form_field_type

感谢 RHR 的回答!

【问题讨论】:

【参考方案1】:

这是我的解决方案:

您可以通过执行以下操作完全替换查询:

1)定义你的查询:

$query = 'SELECT * from table_name WHERE table_id = '.$your_value;

2) 更新表单字段属性:

$this->form->setFieldAttribute('field_name', 'query', $query);

【讨论】:

【参考方案2】:

是的,有可能

我使用的代码

<fields name="request">
 <fieldset name="request" >
<field name="id" type="sql" query="SELECT id , title FROM #__table name where published=1" multiple="single" key_field="id" value_field="title" class="inputbox" label="fieldlabel" description="fielddesc" required="true" />
</fieldset> 
</fields>

您可以通过 custom field 以其他方式执行此操作

【讨论】:

感谢您的回答。但我的问题是我可以做这样的事情吗?我有一张带有产品的桌子和一张带有与品牌相关的商店的桌子。如果我编辑一家商店,我想显示一个包含该商店品牌所有产品的组合框。那可能吗? SELECT * FROM #__products WHERE brand = 与我选择进行编辑的商店关联的品牌 ID 这可能吗?谢谢!【参考方案3】:

刚刚遇到同样的问题。经过一番挖掘,我发现它实际上是可能的。

1.步骤 - 您需要一个自定义表单字段:(我将其命名为 vssql.php)

JFormHelper::loadFieldClass('sql');

class JFormFieldVSSQL extends JFormFieldSQL

    /**
     * The form field type.
     */
    public $type = 'VSSQL';

    /**
     * Overrides parent's method
     */
    protected function getOptions()
    
        // Get the ID
        $query_id = $this->form->getField((string) $this->element['query_id']);

        // Override query
        $this->element['query'] = str_replace('query_id', (string) $query_id->value, (string) $this->element['query']);

        return parent::getOptions();
    

2。步骤 - 你需要知道热才能使用它:

在你的 JForm xml 中添加:

在您的 SQL 查询中,占位符 query_id 将替换为 query_id 中指定的参数的实际值,在本例中为 *user_id*。这将从分配给给定用户的某个表中返回地址列表

【讨论】:

【参考方案4】:

@WooDzu 解决方案的一些更新:

class JFormFieldICategory extends JFormFieldSQL


    public $type = 'ICategory';

    /**
     * Overrides parent's method
     */
    protected function getOptions()
    
        // Get the ID
        $cat_id = $this->form->getField((string) $this->element['cat_id']);

        // Override query
        $this->query = str_replace('cat_id', (string) $cat_id->value, (string) $this->element['query']);
        echo $this->query.' test '; //exit();

        return parent::getOptions();
    

类型应该是公开的并且查询应该分配给$this->query。 效果很好!

【讨论】:

【参考方案5】:

这在 Joomla 2.5+ 和 3.x+ 中对我有用(我用它从 #__extensions 表中选择用户插件)作为 WHERE 条件:

<field name="plugin" type="sql" query="SELECT extension_id as value, name as title FROM #__extensions WHERE type = 'plugin' AND folder = 'user'" />

【讨论】:

我认为这都是关于如何在 where clausule 中使用变量。【参考方案6】:

我遇到了同样的问题。您不能根据变量创建 where 条件,只能基于常量:(

但是您可以使用 form->setField 函数更改表单字段并重新加载视图中的字段。多亏了这一点,您可以在字段 sql 中创建任何条件。

$NewFieldDefinition=new SimpleXMLElement('<field name="catid" type="sql" query="SELECT id, title FROM #__table WHERE title='.$condition.'" />');
$this->form->setField($NewFieldDefinition, null, true);

【讨论】:

以上是关于SQL表单提示"从数据类型varchar转换为int时出错"的主要内容,如果未能解决你的问题,请参考以下文章

oracle 执行sql语句提示用户不存在

在来自 python 的 SQL 查询中将整数作为 VARCHAR() 数据类型传递

在 SQL Server 2008 中将数据从浮点类型的 Excel 导入 varchar

SQL数据类型转换

从 Excel 导入 SQL Server:将 varchar 数据类型转换为 datetime 数据类型导致值超出范围

Oracle SQL 在包含数据时将列类型从数字更改为 varchar2