次のようなデータベースクラスがあります。
class Db
{
public $mysqli = null;
public function __construct($port = NULL)
{
include $_SERVER['DOCUMENT_ROOT'].'/php/'.'config.php';
if($port == NULL)
$port = ini_get('mysqli.default_port');
$this->mysqli = new mysqli(HOST, USER, PASS, DB, $port)
or die('There was a problem connecting to the database');
if ($this->mysqli->connect_errno) {
echo "Error MySQLi: ( " . $this->mysqli->connect_errno . ") " . $this->mysqli->connect_error;
exit();
}
$this->mysqli->set_charset("utf8");
}
これらはすべて正常に機能します。次の関数を追加しました。
public function insert($sql, $bind) {
$stmt = $this->mysqli->prepare($sql);
$stmt->bind_param('sssssss', $bind[0], $bind[1], $bind[2], $bind[3], $bind[4], $bind[5], $bind[6]);
$stmt->execute();
}
もちろん問題は、これがあまり動的ではないことです。バインドするものは 2 つしかない場合があり、必ずしも文字列であるとは限りません。
たとえば、私はこれを行います:
$db = new Db();
$strings = array ($chosenImage, $id);
$db->insert("INSERT INTO Media VALUES (NULL, ?, ?)", $strings);
したがって、これは 2 つのバインドのみです。
私の質問は 2 つあります。1) この関数を、配列の型とサイズをできるだけきれいな方法で評価する関数に変えるにはどうすればよいでしょうか?
2)さらに、同様の機能を使用して(リコールと呼びましょう)selectステートメントを使用して2つのアイテムを返し、それらをバインドして返す方法を教えてください(返したい金額がクエリによって変わると仮定します)