遇到PHP类和MySQL插入/更新问题

时间:2012-12-03 20:28:17

标签: php mysql

我在通过PHP类更新MySQL数据库时遇到了一些麻烦(这是我第一次真正涉足PHP类,所以我可能会遗漏一些非常基本的元素)。我已经包含了与我遇到的问题相关的代码(也就是说,没有正确更新MySQL表)。

为了快速解释我的代码,我在构造对象时从数据库中提取用户的信息。然后,我调用函数modify_column()来增加或减少我提取的数据中的数值。最后,我运行save()来更新MySQL表。

我遇到两个问题:(1)修改功能没有正确更新$this->info(例如,如果我modify_column('age', '1'),则var_dump显示age int(3)而不是{{} 1}}(假设原始年龄是​​9)。并且(2),更新查询不起作用。我假设它是因为我有一个源于第一个问题的不正确大小的变量。

代码片段(我的数据库函数基于PDO包装器,它们一直工作得很好):

age string(2) = 10

另外,请告诉我是否有更简洁的方法来完成我想要完成的工作(也就是说,使用类函数快速修改表中的数值。

谢谢!

1 个答案:

答案 0 :(得分:0)

您似乎没有任何关于输入变量的规定。将数据添加到$this->info时,所有值都将设置为字符串。您不希望对字符串进行增量数学运算(即+=-=等)。您需要将这些值转换为整数。我建议添加一个具有类属性及其类型数组的类属性。然后,您可以在设置$info数组时根据其类型转换所有值。

这样的事情

protected $fields = array(
    'age' => 'integer',
    'name' => 'string',
    // etc.
}

然后你可以添加这样的功能

protected function type_cast(&$value, $key) {
    // field type to use
    $type = $this->fields[$key];
    if ($type === 'integer') {
        $value = (integer)$value;
    } else if ($type === 'string') {
        $value =  (string)$value;
    } // etc.
}

在您的构造函数中,只需通过$result函数{/ 1}} type_cast

array_walk(&$result, array($this, 'type_cast'));
$this->info = $result;

如果在数据库中使用整数,则可能还需要确保将id值转换为整数。

我不确定数据库抽象是如何工作的,所以很难分辨出发生了什么。我建议回应查询本身并对数据库进行尝试,或者查看正在返回的MySQL错误以了解那里出了什么问题。