在mysql中使用变量作为参数

时间:2014-06-19 20:48:14

标签: php mysql parameters

我编写了一种方法,可以根据id从数据库中获取值。

我想在mysql中使用变量id作为参数,但我无法使其工作。

这是我的代码:

function get_color_by_id($id) {
        $mysqli = new mysqli("localhost", "root", "usbw", "ipadshop", 3307);

        if($mysqli->connect_errno){
            die("Connection error: " . $mysqli->connect_error);
        }

        set @id := $id;
        $result = $mysqli->query('SELECT kleur FROM kleur WHERE id=',@id);
        if(!$result){
            die('Query error: ' . $mysqli->error);
        }

        while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
            return $row;
        }
    }

1 个答案:

答案 0 :(得分:0)

PHP 不是 SQL;并且不应期望SQL代码在PHP上下文中工作。因此,过程SQLish语法(set @id := $id)在上下文中无效,后面使用的@id表达式也是如此。

如图所示here(并针对此问题进行了更新),在mysqli中使用参数的正确方法是使用prepare,bind_param和execute。

$stmt = $mysqli->prepare('SELECT kleur FROM kleur WHERE id = ?');
$stmt->bind_param('i', $id);  // assuming $id represents an integer
$result = $stmt->execute();

由于bind_param使用引用调用语义,因此使用的变量应该在绑定后重新分配 not 以避免混淆。


此外,为列和表赋予相同的名称可能会令人困惑;我的偏好是为表/关系使用复数名称,并更多地细化列名。考虑选择不同名称的查询;

SELECT kleurNaam FROM kleuren WHERE id = ?
-- or in English
SELECT colorName FROM colors WHERE id = ?

易于阅读,不是吗?