2

我正在尝试尽可能高效地使用代码。不幸的是,我似乎无法找到一个好的方法来做到这一点。我试过使用看起来更干净的 Sammitch 的代码,但不幸的是它似乎不起作用。

我想要一种不再需要每次都使用准备、执行和功能的方法,这对我来说是最有意义的。使用 Simmitch 的建议,我删除了与数据库的初始连接以停止不必要的开销,但代码仍然无法正常工作。显示“SQLSTATE[HY093]:无效参数号:未定义参数”错误。

我目前的代码(某些部分不必要的省略):

/*Function to talk to database*/
function doQuery($myDB, $myQuery, $myValues)
{
    try
    {     
        $st = $myDB->prepare($myQuery);       
        $st->execute($myValues);
        //echo $success;
    }
    catch (PDOException $e)
    {
        echo "Failed because: " . $e->getMessage();
    }
}

    $db = new PDO('mysql:host=localhost;dbname='dbanme';charset=utf8', 'dbuser', 'dbpass');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //Set error mode
    $query = "INSERT INTO users(login,pass,email,county) VALUES(:username,:password,:email,:count)";
    $values = array('username' => $_POST['username'],
                     'password' => $_POST['password1'],
                     'email' => $_POST['email'],
                     'county' => $_POST['county']
                     );
    doQuery($db, $query, $values);
4

2 回答 2

2
<?php

function doQuery($db, $query, $arguments) {
    try {
        //Prepare and execute an insert into DB         
        $st = $db->prepare($query);       
        $st->execute(array($values));
        echo $success; // 4. use echo
        // you should probably return something here...
    } catch (PDOException $e) {
        // 5. Fail ~descriptively~
        echo "Failed because: " . $e->getMessage();
        // you should probably return something here...
    }
}

// 1. Don't create the database inside of the same function that does the queries,
//    creation/destruction of the objects/connections will cause unnecessary overhead,
$myDb = new PDO('mysql:host=localhost;dbname=dbname;charset=utf8', 'dbuser', 'dbpassword');
$myDb->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //Set error mode

$myQuery = "INSERT INTO users(login,pass,email,county) VALUES(:username,:password,:email,:count)";

// 2. You can't define an array like that.
// 3. You do not need to add colons to the array indexes.
$myValues = array(
    'username' => $_POST['username'],
    'password' => $_POST['password1'],
    'email' => $_POST['email'],
    'county' => $_POST['county']
);

doquery($myDb, $myQuery, $myValues)
于 2013-09-17T21:40:14.773 回答
1

不要忘记在您的参数数组中包含“:”?

/*Function to talk to database*/
function doQuery($myDB, $myQuery, $myValues)
{
    try
    {     
        $st = $myDB->prepare($myQuery);       
        $st->execute(array($myValues));
        //echo $success;
    }
    catch (PDOException $e)
    {
        echo "Failed because: " . $e->getMessage();
    }
}

    $db = new PDO('mysql:host=localhost;dbname='dbanme';charset=utf8', 'dbuser', 'dbpass');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //Set error mode
    $query = "INSERT INTO users(login,pass,email,county) VALUES(:username,:password,:email,:count)";
    $values = array(':username' => $_POST['username'],
                     ':password' => $_POST['password1'],
                     ':email' => $_POST['email'],
                     ':county' => $_POST['county']
                     );
    doQuery($db, $query, $values);

我希望这有效!

于 2013-09-18T10:02:42.700 回答