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 に答える