首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个不行?sqlit3 php

为什么这个不行?sqlit3 php
EN

Stack Overflow用户
提问于 2015-12-19 23:15:43
回答 1查看 46关注 0票数 0

我想让用户通过他的电子邮件地址或用户名.但不起作用。每次我用一个字符串而不是一个数字,我就会变假。

这是一个学校项目,所以我不能使用任何框架:

这不适用于$objAcc->getUser('email','example@gmail.com')

这行得通

代码语言:javascript
复制
$objAcc->getUser('user_id', '1')

卫理德:

代码语言:javascript
复制
    public function getUser($by = NULL, $value = NULL, $quantity = 0) {
        global $database;

        try {
            $row = array();
            if (isset($by) && isset($value)) {
                $query = 'SELECT * FROM "user" WHERE :by=:value';
                $stmt = $database->prepare($query);

                $type = ($by == 'user_id' || $by == 'phone' || $by == 'fax' || $by == 'zip' || $by == 'admin') ? SQLITE3_INTEGER : SQLITE3_TEXT;
                $stmt->bindValue(':by', $by, SQLITE3_TEXT);
                $stmt->bindValue(':value', $value, $type);

                $result = $stmt->execute();
            } else {
                $query = 'SELECT * FROM "user"';
                $stmt = $database->prepare($query);

                $result = $stmt->execute();
            }

            if ($quantity) {
                for ($i = 0; $i < $quantity; $i++) {
                    $row[ $i ] = $result->fetchArray(SQLITE3_ASSOC);
                }
            } else {
                $i = 0;
                while ($entry = $result->fetchArray(SQLITE3_ASSOC)) {
                    $row[ $i ] = $entry;
                    $i++;
                }
            }

            if (empty($row[0])) {
                return FALSE;
            }

            return $row;

        } catch (Exception $e) {
            var_dump($e);
            die();
        }
    }

希望你们能帮我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-20 00:02:11

我认为你不能用绑定来表示列名。我建议动态创建SQL语句,但只在验证$by参数与现有列名匹配之后(避免SQL注入的风险):

代码语言:javascript
复制
$numFields = array("user_id", "phone", "fax", "zip", "admin");
$charFields = array("email");
$allFields = array_merge($numFields, $charFields);

$row = array();
if (isset($by) && isset($value) && in_array($by, $allFields)) {
    $query = 'SELECT * FROM "user" WHERE ' . $by . '=:value';
    $stmt = $database->prepare($query);
    $type = in_array($numFields, $by) ? SQLITE3_INTEGER : SQLITE3_TEXT;
    $stmt->bindValue(':value', $value, $type);
} else {
    $query = 'SELECT * FROM "user"';
    $stmt = $database->prepare($query);
}
$result = $stmt->execute();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34376398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档