1

このコードがあるとしましょう:

$array = array('one' => $one, 'two' => $two);
$sql->sql_insert('table_name', $array);

クラスオブジェクト$sqlと関数sql_insertがありますが、mysqli の準備済みステートメントを使用して値をバインドし、db に挿入するにはどうすればよいですか? mysqli connectionそして、あるとしましょう$this->connection

どんなアドバイスでも大歓迎です。

編集:

function sql_insert_bind($table, $insert){

    $count = count($insert);
    $bind_val = '';
    for($i = 0; $i <= $count; $i++){

        $bind_val .= '?, ';
    }

    $query = $this->connection->prepare('INSERT INTO `'.$table.'` VALUES ('.substr($bind_val, 0, -2).')');

    foreach($insert as $key => $value){

        $query->bind_param($key, $value);
    }

    $query->execute();
}

エラーメッセージが表示されます:Fatal error: Call to a member function bind_param() on a non-objectしかし$this->connection、mysqliオブジェクトです

4

2 に答える 2

2

OK、これがPDOでこれにアプローチする方法です(OPが尋ねたので)

$connectionPDO オブジェクトをプロパティとしてクラスにインスタンス化または注入したと仮定します。

class SQLClass {
    /**
     * @var PDO
     */
    private $connection;

    public function __construct(PDO $pdo) {
        $this->connection = $pdo;
    }

    // etc
}

$pdo = new PDO('mysql:host=localhost;dbname=db_name;charset=utf8', 'username', 'password', array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_EMULATE_PREPARES => false,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC));

$sql = new SQLClass($pdo); 

次に、あなたのsql_insert_bind方法で

$keys = array_keys($insert);

$cols = array_map(function($key) {
    return sprintf('`%s`', $key);
}, $keys);

$placeholders = array_map(function($key) {
    return sprintf(':%s', $key);
}, $keys);

$params = array_combine($placeholders, $insert);

$query = sprintf('INSERT INTO `%s` (%s) VALUES (%s)',
    $table, implode(',', $cols), implode(',', $placeholders));

$stmt = $this->connection->prepare($query);
$stmt->execute($params);
于 2013-10-16T02:12:20.153 に答える
1

各変数を個別にバインドする必要があります。bind_paramは、バインドする多くの変数を受け入れます。

$array = array('one' => $one, 'two' => $two);
$query = $sql->prepare("INSERT INTO `table` VALUES (?, ?)");
$query->bind_param('ss', $array['one'], $array['two']);
$query->execute();
// inserted
于 2013-10-16T00:45:10.537 に答える