小编Gor*_*onM的帖子

switch语句中的奇怪行为

我正在为可排序的表编写代码,其中单击标题中的链接会更改生成一组搜索结果时执行的ORDER BY(如果没有有效的顺序,则导致查询不按顺序运行然后按照数据库返回的顺序返回结果.这是设计的).代码是在我的雇主提供的框架内编写的.

要验证查询的ORDER BY部分,我通过以下验证函数运行输入.

<?php
function sortMode ($name)
{
    $mode   = '';
    switch ($name)
    {
        case 'resnum'   : $mode = 'b_resnum';            break;
        case 'state'    : $mode = 'st_id';               break;
        case 'name'     : $mode = 'lastname, firstname'; break;
        case 'phone'    : $mode = 'phone';               break;
        case 'email'    : $mode = 'email';               break;
        case 'opened'   : $mode = 'cs_created';          break;
        default         : $mode = '';                    break;
    }
    return ($mode);
}
?>
Run Code Online (Sandbox Code Playgroud)

在测试中,我发现如果没有提供参数,那么排序顺序将是resnum.经过一些实验,我发现框架中内置的过滤会导致请求未初始化的变量(如未设置的GET参数)返回整数0.如果上面的代码被输入一个0整数作为其输入,它将始终跟随第一个可用的执行路径.

作为一个实验,我尝试在switch语句中重新排列case的顺序,并发现如果该函数传递0,那么顶部的任何内容都将被执行.

该问题的解决方案是使用switch (strval($name))所以特定问题得到解决,但现在我很好奇PHP开关语句的一般行为.我亲眼目睹了PHP的正确行为吗?PHP中是否存在导致此问题的错误,或者我在我不知道的代码中出错?

php switch-statement

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

MySQL复制用户

我想在我的MySQL测试数据库上创建两个用户,一个用户可以对与生成报告相关的表进行只读访问等,另一个用户可以对同一个表进行读写访问.这用于测试通常与只读用户连接的子系统,但是为某些任务切换到读写用户.我已经使用正确的权限创建了读写用户,现在我需要同一用户的只读版本.

我不想从头开始创建只读版本,因为我必须设置很多权限,这是相当费力的.有没有办法可以根据现有用户创建新用户,然后从新用户中删除INSERT/UPDATE/DELETE权限?有类似CREATE USER 'user2' LIKE 'user1'或类似的东西?如果可以做到这一点,我在MySQL文档中找不到它.

mysql permissions copying

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

仅打印iFrame

我正在研究案例解析系统,目前正在使用jquery颜色框向用户显示打开的任务列表.用户希望能够打印此列表,我想您可以通过添加从iframe中触发window.print的JavaScript链接在页面内部执行此操作.但是,我还要考虑用户可能从浏览器的菜单中选择打印.在这种情况下,如果颜色框是打开的,我只想打印其内容而不是上面的页面.

是否可以使用打印媒体CSS文件隐藏除iframed内容之外的所有内容?如果是这样,怎么能实现呢?如果做不到这一点,我将需要求助于JavaScript,那么在JavaScript中实现这种效果是否可行?

html javascript css printing iframe

6
推荐指数
2
解决办法
2万
查看次数

MySQL:约束一组列,这样至少有一列不是NULL

我想要一个包含两列的SQL表.一个是另一个表的键,另一个是字符串文字.这个想法是可以准确输入电话号码(在这种情况下使用电话簿表中的ID)或作为通配符(使用字符串文字).

这意味着表中的一列将保存一个值,另一列将保留NULL.

是否可以以一种列必须具有值,另一列必须为NULL的方式约束表?如果两列都为NULL或两者都有值,则该行无效.

我有一种感觉,MySQL无法做到这一点(因为它似乎没有一个全面的工具箱,当涉及到约束),但它不会伤害问.

mysql constraints

6
推荐指数
2
解决办法
6130
查看次数

慢DROP TEMPORARY TABLE

进入一个有趣的问题,我正在构建一个MySQL表作为临时表用于报告目的.

我发现如果我没有指定存储引擎,DROP TEMPORARY TABLE命令将挂起最多半秒.

如果我将我的表定义为ENGINE = MEMORY,那么这个短暂的挂起就会消失.

由于我有一个解决这个问题的方法(使用MEMORY表),我的问题是为什么临时表需要很长时间才能删除?默认情况下他们不使用MEMORY引擎吗?它甚至不是一个非常大的表,我的当前测试数据有几百行.

mysql performance temp-tables

6
推荐指数
1
解决办法
1124
查看次数

将MySQL触发器中的Null与另一个值进行比较

所以这是我的问题我正在更新表行时比较新旧值.但新旧值有时会为空.所以下面的代码不起作用.我可以解决这个问题吗?

谢谢

BEFORE UPDATE ON mytable
   FOR EACH ROW
BEGIN
        IF OLD.assignedto != NEW.assignedto
        THEN
                INSERT INTO history
                    (
                        asset    ,
                        changedfield     ,
                        oldvalue    ,
                        newvalue      
                    )
                    VALUES
                    (
                        NEW.asset,
                        'assignedto',
                        OLD.assignedto,
                        NEW.assignedto
                    );
        END IF;
    END$$
Run Code Online (Sandbox Code Playgroud)

mysql null triggers compare

6
推荐指数
2
解决办法
7452
查看次数

PHP超类在不知道它们的情况下调用子类方法?

在尝试调试一些PHP类时,我遇到了一些在我看来非常奇怪的行为.

我构建了以下行为的演示:

class BaseClass {
   public function baseMethod () {
      echo (implode (' ', $this -> childMethod ()) . PHP_EOL);
   }
}

class ChildClass extends BaseClass {
   protected function childMethod () {
      return array ('What', 'The', 'Actual', 'Fork!');
   }
}

$a = new ChildClass ();
$a -> baseMethod ();
Run Code Online (Sandbox Code Playgroud)

现在,在我看来,基类根本不应该对子类做任何假设,除了它通过声明(或继承)抽象方法或通过实现接口对子类强制执行的假设.但是,上面的代码实际上输出一个字符串,并没有抛出任何错误!

实际的叉子!

这对我来说似乎是破碎的行为.除非基类声明abstract protected function childMethod();,它应该不能调用它,是吗?

我一直在网上搜索,试图找到一些证明这是预期行为的东西.到目前为止,我所能找到的是PHP手册中的以下内容:

来自其他对象的可见性

即使它们不是相同的实例,相同类型的对象也可以访问彼此私有和受保护的成员.这是因为在这些对象内部时已经知道实现特定的细节

我在这里看到的行为是正确的还是PHP中的错误?这肯定不是我依赖的行为,因为它对我来说似乎不对.

仅供参考,我们在实际代码中发现的问题是子类声明了超类试图调用的私有方法.超类没有声明方法是抽象的(如果它已经完成它必须至少受到保护).

php oop subclass superclass

6
推荐指数
1
解决办法
4699
查看次数

Hibernate,自动持久化依赖对象

我对Hibernate很陌生,一直试图确定它将为你做什么以及它需要你做什么.

一个重要的是处理具有数据库中尚不存在的依赖项的对象.例如,我有一个Project对象,其中包含一个Manufacturer字段,该字段接受Manufacturer对象作为其值.在数据库中,我有一个带有mfr_id列的产品表,该列是对manufacturer表的引用(一种相当典型的单向一对多关系).

如果分配给产品对象的制造商与已经存在于数据库中的制造商有关,则没有问题.但是,当我尝试保存或更新引用尚未持久化的制造商的对象时,操作将失败并出现异常.

线程"Application"中的异常org.hibernate.TransientObjectException:对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例

我当然可以手动检查产品制造商的状态,看看它的ID字段是否为空,如果是,则将其保存,但这似乎是一个麻烦的解决方案.如果尚未保留相关的依赖项,Hibernate是否支持自动持久的依赖项?如果是这样,我该如何启用该行为?我正在使用与Netbeans捆绑的Hibernate版本(我相信3.5)和用于指定映射行为的内联注释.以下是我的产品和制造商类,减少了处理依赖关系的部分.(产品扩展为Sellable,映射到可销售的表,使用JOINED作为继承策略.该表包含标识产品的主键)

@Entity
@Table (
        name="products",
        schema="sellable"
)
public abstract class Product extends Sellable {
    private Manufacturer                        manufacturer;

    @ManyToOne (fetch = FetchType.EAGER)
    @JoinColumn (name = "mfr_id")
    public Manufacturer getManufacturer () {
        return this.manufacturer;
    }

    /**
     * 
     * @param manufacturer 
     */
    public Product setManufacturer (Manufacturer manufacturer) {
        this.manufacturer   = manufacturer;
        return this;
    }
}
Run Code Online (Sandbox Code Playgroud)

依赖制造商

@Entity
@Table (
        name="manufacturers",
        schema="sellable",
        uniqueConstraints = @UniqueConstraint(columnNames="mfr_name") 
)
public class Manufacturer implements Serializable {
    private Integer         mfrId       = null;
    private …
Run Code Online (Sandbox Code Playgroud)

java orm hibernate cascade

6
推荐指数
1
解决办法
2万
查看次数

获取文件的字符编码而不将整个文件读入内存

我知道你是否需要在PHP中获取文件的字符编码

var_dump (mb_detect_encoding (file_get_contents ("somefile.txt")));
Run Code Online (Sandbox Code Playgroud)

但是,使用大文件执行此操作并不是很实用,因为它占用了大量内存.

有没有办法可靠地确定字符编码而无需将整个文件读入内存?

php file character-encoding

6
推荐指数
1
解决办法
99
查看次数

安全地连接多字节字符串

我正在越来越多地确保 PHP 应用程序是多字节安全的,这主要涉及用其等效的 mb_* 函数替换字符串操作函数。

然而,字符串连接让我停下来思考。

某些字符编码(例如 UTF-16 unicode)可以在开头包含字节顺序标记。如果您连接了两个 UTF16 字符串,则可能会将 BOM 引入到结果字符串的开头位置以外的位置。我怀疑还有其他编码也可以包含“标题”信息,这样将两个相同编码的字符串拼接在一起也会有问题。在进行多字节字符串连接时,PHP 是否足够聪明以丢弃 BOM 等?我怀疑不是因为 PHP 传统上只将字符串视为字节序列。是否有一个多字节安全等价于连接?我在 mbstring 文档中找不到任何内容。

显然,连接不同编码的字符串永远不会安全,所以我现在不担心。

php string multibyte

6
推荐指数
1
解决办法
401
查看次数