How to make PDO query work inside a function

断了今生、忘了曾经 提交于 2020-01-04 05:57:48

问题


I am try to make an PDO sql inside function but it doesn't work. got no response from it. it works when not using function. my purpose is to make my code small. anyone can shed a light. thanks.

function Test() {

    $get_name = $smt->prepare("SELECT * FROM customer WHERE id = '1'");
    $get_name->execute();

    foreach ($get_name as $temp) {
        $name = $temp['name'];
        $address = $temp['address'];
        $phone = $temp['phone'];
        $page = $temp['page'];
    }

    eval("\$page = \"$page\";");
    echo $page;

    eval("\$page = \"$page\";");
    echo $page;

}

Test();

回答1:


I'd probably refactor your code to something like:

function getCustomerInfo(PDO $pdo, $customerId) 
{
    // use a prepared statement that can get you info on any customer
    $statement = $pdo->prepare(
        "SELECT * FROM customer WHERE id = :customerId LIMIT 1");
    // get the result resource from the database
    $result = $statement->execute(array(
        ':customerId' => $customerId
    ));
    // fetch the first row in the result as an associative array
    // and return it to the caller.
    return $result->fetchFirst(PDO::FETCH_ASSOC);
}

// use your connection in place of $pdo
$customerData = getCustomerInfo($pdo, 1);

// now you can do stuff with your data
var_dump($customerData);

This is better because it does not rely on global state, functions should never-ever-ever do that. and it uses prepared, parameterized sql that makes it faster and the function more useful for customers other that the one where id=1.




回答2:


You need to make the pdo instance global within the function

function Test() {

    global $smt;


来源:https://stackoverflow.com/questions/8181202/how-to-make-pdo-query-work-inside-a-function

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!