小编Alp*_*aus的帖子

PHP PDO插入NULL而不是空的potgresql

我正在使用带有Postgresql后端的PHP PDO.我有一个表有一些可以为空的字段,当用户在HTML表单字段中没有输入任何内容时,我想在该字段中插入NULL,而不是空字符串(这很重要,因为这些表中的一些SELECT稍后会使用条件等as WHERE x IS NOT NULL).

但是,此版本的bindParam代码会将空字符串插入可为空的字段而不是NULL.

$stmt2->bindParam(':title', $title, PDO::PARAM_STR);
Run Code Online (Sandbox Code Playgroud)

我已经阅读了很多,并且发现这是将null插入字段的答案:

$stmt2->bindParam(':title', $title, PDO::PARAM_NULL);
Run Code Online (Sandbox Code Playgroud)

但这意味着我需要预先检查所有传递给可空字段的参数,以确定它们是否为空,如果是,则传递PDO :: PARAM_NULL而不是PDO_PARAM_STR.我当然可以这样做,但希望可能有一个设置只会告诉PDO它是否遇到空字符串,而是插入null.

我偶然发现了这个

$this->dbh->setAttribute(PDO::ATTR_ORACLE_NULLS, PDO::NULL_EMPTY_STRING);
Run Code Online (Sandbox Code Playgroud)

但它没有任何效果,经过进一步的研究,我认为这只影响出路的记录,而不是在路上.

除了预先检查变量之外的任何选项?

谢谢亚伦

php postgresql null pdo bindparam

7
推荐指数
1
解决办法
2196
查看次数

南不为第三方安装的应用程序创建表

我正在使用django创建一个博客.它安装在虚拟环境中,并已安装django-tagging.我在做DB迁移以南,一切似乎好的工作与我的迁移,但似乎没有被创建的标签表,所以当我去通过管理来添加一个博客文章中,我得到了著名PostgreSQL的错误:

Exception Type: DatabaseError at /admin/bppsite/blogpost/add/
Exception Value: relation "tagging_tag" does not exist
LINE 1: ...ECT "tagging_tag"."id", "tagging_tag"."name" FROM "tagging_t...
Run Code Online (Sandbox Code Playgroud)

这是我的models.py的相关部分:

from south.modelsinspector import add_introspection_rules
add_introspection_rules([], ["^tagging\.fields\.TagField"])

from tagging.models import Tag
from tagging.fields import TagField

class BlogPost(models.Model):
    title = models.CharField(max_length = 255)
    text = models.TextField()
    author = models.ForeignKey(User)
    created = models.DateTimeField(auto_now_add = True)
    modified = models.DateTimeField(auto_now = True)
    status = models.CharField(max_length = 10, choices=POST_STATUS_CHOICES,     default='DRAFT')
    slug = models.SlugField(max_length = 255, blank=True)
    category = models.ManyToManyField(Category)
    tags = TagField()

    def __unicode__(self):
        return …
Run Code Online (Sandbox Code Playgroud)

django postgresql django-south

4
推荐指数
1
解决办法
1073
查看次数

使用同一个表中的select来更新前的PLpgsql

我正在尝试创建一个PL/PGSQL触发器函数来检查新行的日期范围,以确保表中没有其他日期范围重叠的行(对于相同的product_id).我已经成功创建了该函数并将其设置为BEFORE INSERT触发器,但我正在试图弄清楚如何将其设置为BEFORE UPDATE触发器,因为触发器内的SELECT语句肯定会抛出异常,因为它适合重叠自身更新版本日期的标准.

这是我的功能:

CREATE OR REPLACE FUNCTION check_specials_dates() 
RETURNS trigger AS 
$$
DECLARE
BEGIN
  IF EXISTS (SELECT * FROM rar.product_specials 
           WHERE product_id = NEW.product_id 
             AND (
             (NEW.end_time between start_time and end_time) OR
             (NEW.start_time between start_time and end_time) OR
             (start_time between NEW.start_time and NEW.end_time))
  THEN
    RAISE EXCEPTION 
     'Cannot insert overlapping specials date for Product ID#%', NEW.product_id;   
 END IF; 
  RETURN NEW;
END
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

我的想法是IF EXISTS SELECT语句将返回一个匹配项,因为它将在它尝试更新的行上匹配.

它是否正确?如果是这样,我该如何解决它?

postgresql plpgsql

0
推荐指数
1
解决办法
1690
查看次数

标签 统计

postgresql ×3

bindparam ×1

django ×1

django-south ×1

null ×1

pdo ×1

php ×1

plpgsql ×1