如何“真正”检测数据库中的整数?

时间:2011-07-19 18:01:22

标签: php mysql

我正在尝试使用以下内容保存一些代码。我有一个对象,其变量名称与表行相同,因此我可以像这样创建一个插入:

$query = "INSERT INTO table ";
        $columns = '(';
        $values = 'VALUES (';
        foreach ($this as $var => $value){
            if ($value){
                $columns .= $var.', ';
                if (!is_int($value))
                    $value = '\''.$value.'\'';
                $values .= $value.', ';
            }
        }
        $columns .= ')';
        $values .= ')';
        $columns = str_replace (', )', ')', $columns);
        $values = str_replace (', )', ')', $values);
        $query .= $columns." ".$values;

但是每个变量都被检测为字符串,并且在您想象的所有字段中都不是这样。

有没有人有解决方案?

3 个答案:

答案 0 :(得分:3)

以下是我的写作方式:

<?php
$canonical_columns = array_flip(array("column1", "column2", "column3"));
$columns = array_keys(array_intersect_key($canonical_columns, (array) $this));
$params = join(",", array_fill(0, count($columns), "?"));
$columns = join(",", $columns);
$query = "INSERT INTO table ($columns) VALUES ($params)";
$stmt = $pdo->prepare($query);
$stmt->execute(array_values($this));

停止连接字符串片段以形成SQL。

使用PDO,并使用参数作为值。

通过将输入与已知的有效列名进行比较,将列列名列入白名单。

答案 1 :(得分:0)

看起来好像你的数字实际上是字符串。尝试使用is_numeric()而不是is_int()。 如果这还不够,可以将字符串转换为整数,然后检查!= 0。

答案 2 :(得分:0)

您也可以在引号中插入数字,作为字符串。这不会产生错误。

相关问题