Понимание того, как связывать параметры и вставлять данные в Adodb - PullRequest
1 голос
/ 02 марта 2010

Мне сказали использовать параметры связывания, чтобы я мог вставить текст в свою базу данных, в которой были кавычки. Но я довольно запутался, когда дело доходит до того, как это сделать, команды кажутся мне запутанными.

Итак, если бы у меня была строка php, которая содержала html, как бы я вставил ее в свою БД, используя параметры связывания?

Я хотел ВСТАВИТЬ это, как бы я это сделал?

$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 ]

0 голосов
/ 02 марта 2010

Адаптировано из среды 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'));
0 голосов
/ 02 марта 2010

Я некоторое время не пользовался 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));
0 голосов
/ 02 марта 2010

Символы? В SQL служат заполнителями для значений, которые связаны с оператором.

Когда выполняется, ADO выполняется (в вашем примере)быть в состоянии построить ваш SQL вставки примерно как:

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

Передача ваших значений (в правильном порядке) выдаст соответствующий запрос.

0 голосов
/ 02 марта 2010

Использование 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-инъекций.

...