1

引用符が含まれるテキストをデータベースに挿入できるように、バインドパラメーターを使用するように言われました。しかし、これを行う方法に関してはかなり混乱しています。コマンドがわかりにくいようです。

html を含む php 文字列がある場合、バインド パラメータを使用してこれを DB に挿入するにはどうすればよいでしょうか。

INSERTしたかったのですが、どうすればいいですか?

$str = '<div id="test"><a href="#">Test string in db</a></div> string content';

次のようなものを使用するように言われました:

$rs = $db->Execute('select * from table where val=?', array('10'));
4

4 に答える 4

0

SQLの?は、ステートメントにバインドされている値のプレースホルダーとして機能します。

実行されると、ADOが実行されます(例を挙げれば)

select * from table where val=10

挿入SQLは大まかに次のように作成できるはずです。

INSERT INTO `table` (`col1`, `col2` ...) VALUES(?, ? ...)

値を(正しい順序で)渡すと、適切なクエリがレンダリングされます。

于 2010-03-02T07:56:44.473 に答える
0

mysql_real_escape_stringを使用してもうまくいくはずです。引用符を自動的にエスケープしてから、データベースにデータを挿入できます。

$str = '<div id="test"><a href="#">Test string in db</a></div> string content';
$str_escaped = mysql_real_escape_string($str);

これで、変数を安全に使用$str_escapedしてデータベースにデータを挿入できます。さらに、SQL インジェクション攻撃の防止にも役立ちます。

于 2010-03-02T07:50:28.700 に答える
0

しばらく ADODB を使用していませんが、これでうまくいくと思います。

$str = '<div id="test"><a href="#">Test string in db</a></div> string content';
$rs = $db->Execute('select * from table where val=?', array($str));
于 2010-03-02T07:50:44.860 に答える
0

CodeIgniter フレームワークから適応:

function compile_binds($sql, $binds)
{
    if (strpos($sql, '?') === FALSE)
    {
        return $sql;
    }

    if ( ! is_array($binds))
    {
        $binds = array($binds);
    }

    // Get the sql segments around the bind markers
    $segments = explode('?', $sql);

    // The count of bind should be 1 less then the count of segments
    // If there are more bind arguments trim it down
    if (count($binds) >= count($segments)) {
        $binds = array_slice($binds, 0, count($segments)-1);
    }

    // Construct the binded query
    $result = $segments[0];
    $i = 0;
    foreach ($binds as $bind)
    {
        $result .= mysql_real_escape_string($bind);
        $result .= $segments[++$i];
    }

    return $result;
}

次に、関数を持つことができます:

function query($sql, $binds)
{
    return $db->Execute(compile_binds($sql, $binds));
}

$query = query('select * from table where val=?', array('10'));
于 2010-03-02T08:56:02.940 に答える