标签: bindparam

PDO - 在bindParam中使用LIKE

我正在测试一个小搜索功能:

但我遇到了一个我似乎无法解决的错误.您可以在此处查看PDO查询:

$search = "test1"; //later to be changes to $_POST ['search'];

$sql = "SELECT id, name FROM clients WHEE name like %:name% order by id LIMIT 5";
$stm = $db->prepare ( $sql );
$stm->bindParam ( ":name" , $search);
$result = $stm->execute ();
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在尝试从我的查询中绑定参数%:name%,但我不知道这实际上是否可行?

我解除了错误:未捕获的异常'PDOException',消息'SQLSTATE [42000]:.....

我可以在错误中看到"已经放在test1%'test1'%

我正在努力,或者我需要做这样的事情?

$query = "SELECT id, name FROM clients WHEE name like :name order by id LIMIT 5";

$sql->execute(array(":name" => "%" .$search . "%"));
Run Code Online (Sandbox Code Playgroud)

php sql pdo bindparam

3
推荐指数
1
解决办法
1046
查看次数

了解 PDO 准备语句和绑定参数

根据经验,并且不断被告知使用准备好的语句和绑定参数的好处,我在代码中不断使用这两种技术,但是我想确切地了解这两种技术的用途:

根据我对准备好的陈述的理解:

$sql = "SELECT * FROM myTable WHERE id = ".$id;
$stmt = $conn->prepare($sql);
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)

前面的代码应该使用我建议的查询在数据库中创建一种缓冲区。现在根据我的理解(我可能是非常错误的),前面的代码是不安全的,因为字符串$sql可以是任何内容,具体取决于$id实际情况,如果$id= 1; DROP TABLE myTable;--,即使我有准备好的语句,我也会插入恶意查询。

根据我的理解,这是绑定我的参数的地方。如果我执行以下操作:

$sql = "SELECT * FROM myTable WHERE id = :id";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':id', $id);
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)

数据库应该事先准确地知道sql语句的所有部分: SELECT这些列:* FROM myTableWHERE id =“用户输入的变量”,如果"a variable that was input by the user" != a variable,则查询失败。

有些人告诉我我的理解是正确的,而另一些人则告诉我这是错误的,如果我错了、正确或遗漏了什么,有人可以告诉我吗?并根据您的需要进行详细说明,非常感谢所有反馈!

php mysql pdo prepare bindparam

3
推荐指数
1
解决办法
6765
查看次数

如何使用带有数组作为第二个参数的mysqli :: bind_param

该查询应该在“用户”表中插入一个新用户

$user = DB::getInstance()->insert('users', array(
        'username' => 'jim',
        'password' => 'pass',
        'salt' => 'salt'
       )
);
Run Code Online (Sandbox Code Playgroud)

对应的insert()

public function insert($table, $fields = array())
{
    if (count($fields)) {
        $keys   = array_keys($fields);
        $values = null;
        $x      = 1;
        foreach ($fields as $field) {
            $values .= "?";
            if ($x < count($fields)) {
                $values .= ', ';
            }
            $x++;
        }
        $sql = "INSERT INTO users (`" . implode('`,`', $keys) . "`) VALUES ({$values})";
        echo $sql;
        if($this->queryDB($sql,$fields)){
            echo "its good";
            return true;
        }else{
            echo "bad …
Run Code Online (Sandbox Code Playgroud)

php arrays mysqli prepared-statement bindparam

3
推荐指数
1
解决办法
728
查看次数

PDO 绑定参数取决于它们是否存在于查询中

假设我有一个 mysql 查询,它是根据某些条件构建的:示例

$query = "SELECT * from `usertable` where users_active=:users_active";
if($mode=="archived") {
    $query .= " AND archived=:archived";
}

$stmt = $dbpdo->prepare($query);
$stmt->bindParam(':users_active', $users_active);
$stmt->bindParam(':archived', $archived);
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)

现在,如果我运行上面的代码,它仅在 $mode=="archived" 时才有效,否则命名占位符“:archived”将不会成为查询的一部分。

从一方面来说,这对我来说是有道理的,但又引出了如何优雅地处理它的问题。我的应用程序中有很多查询是有条件构建的。我可以这样做,但这对我来说似乎是重复的:

if($mode=="archived") {
    $stmt->bindParam(':archived', $archived);
}
Run Code Online (Sandbox Code Playgroud)

这看起来很冗长,特别是如果查询的构建方式有很多条件的话。有谁对如何做到这一点有一个更简洁的想法,而无需添加大量条件测试。

任何想法将不胜感激。

问候

詹姆士

php mysql pdo bindparam

2
推荐指数
1
解决办法
1423
查看次数

来自数组的PDO bindParam变量数据类型

我有一个数组,它将mysql-colums与PDO数据类型联系起来:

$imp->datafields=array(
  "id"           => "PARAM_INT",
  "name"         => "PARAM_STR",
  "cookieLength" => "PARAM_INT"
);
Run Code Online (Sandbox Code Playgroud)

我想使用foreach()绑定这些参数

foreach($imp->datafields AS $key => $value) {
   $stmt->bindParam(':$key', $program->$key, PDO::$value);
}
Run Code Online (Sandbox Code Playgroud)

并得到此错误:

PHP Fatal error:  Access to undeclared static property: PDO::$value
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

php mysql arrays pdo bindparam

2
推荐指数
1
解决办法
249
查看次数

PHP bind_param与数组

是否可以使用bind_param()数组?

例如

$stmt->bind_param('iss', Array(101, 'SomeString 1', 'Some string 2'));
// OR
$stmt->bind_param(Array('iss'), Array(101, 'String1', 'String2'));
// OR
$stmt->bind_param(Array( Array('i', 101), Array('s', 'String1'), Array('s', 'String2') ));
Run Code Online (Sandbox Code Playgroud)

这些示例中的任何一个都可以在PHP(或任何其他示例)中使用吗?

最后我可以使用我的函数/类

$sql->upload( $table, Array('n;id', 's;username=' . $username, 's;password=' . $password) );
Run Code Online (Sandbox Code Playgroud)

功能探索

public function upload( String $table , Array $values )

// Where example array could be Array('s;column=someString', 'i;SomeIntegerColumn=10', 'n;SomeID')
/*
    identifier;column=value
    Basically where identifier can be "n", "d", "i" or "s"
    column is the name of the sql column to inset …
Run Code Online (Sandbox Code Playgroud)

php mysqli prepared-statement bindparam

2
推荐指数
1
解决办法
1197
查看次数

您可以使用 OR 将多个参数传递给 SQL/PHP 单绑定语句吗?

我有一个将数据传递到服务器的搜索栏。我正在接收发送的句子并将其分解为单独的单词。

然后我将一列与句子中的每个单词进行比较。

$term = filter_var($input['term'], FILTER_SANITIZE_STRING);
$terms = explode(" ", $term);
$size = sizeof($terms);

$posts = DB::select('SELECT * FROM cars
WHERE color = ?',
$terms[0] || $terms[1] || $terms[2] || $terms[3] || $terms[4] );
Run Code Online (Sandbox Code Playgroud)

在一个绑定上绑定多个参数的正确方法是什么?

这种方式会变得混乱,因为我想搜索其他列。

for ($i=0; $i < $size ; $i++) {
    $posts = DB::select('SELECT * FROM cars
        WHERE color = ? AND
        WHERE model =?',
    $terms[$i], $terms[$i],);
}
Run Code Online (Sandbox Code Playgroud)

php mysql sql bindparam

2
推荐指数
1
解决办法
1359
查看次数

如何动态准备 SQL 查询(列名也是如此)避免 SQL 注入

我最近了解了 SQL 注入以及避免它的 PHP 建议,使用prepare()bind_param()。现在,我想动态地准备 SQL 查询,添加列名和值。

我以前是这样做name的,HTML 输入的字段与 MySQL 数据库列的名称相同。

    <input type="text" name="firstname" >
    <input type="text" name="lastname" >
Run Code Online (Sandbox Code Playgroud)

并且,使用 mysqli 动态创建 SQL 查询。

    // Extract values from POST
    $parameters = $_POST;
    // Organize the values in two strings
    foreach ($parameters as $id => $value) {
        $fields = $fields . "`" . $id . "`,";
        $values = $values . "'" . $value . "',"; 

        /*e.g.
            $fields = `firstname`,`lastname`
            $values = 'John','Wick'
        */
    }

    // …
Run Code Online (Sandbox Code Playgroud)

html php mysqli sql-injection bindparam

2
推荐指数
1
解决办法
938
查看次数

PDO-> bindParam,PDO-> bindValue和PDO-> closeCursor

到目前为止,我一直在使用PDO->bindParam阅读手册,我PDO->bindValue从我可以告诉的PDO->bindValue传递值中找到PDO->bindParam通过引用传递,这是唯一的区别吗?

$modThread = db()->prepare("UPDATE `threads` SET `modtime` = UNIX_TIMESTAMP( ) WHERE `threadid` =:id LIMIT 1");

while(something)
{
        $modThread->bindParam(':id', $thread);
        $modThread->execute();
//*******************HERE********************//
}
Run Code Online (Sandbox Code Playgroud)

在阅读手册时我发现:PDO->closeCursor我应该把它放在标记的位置吗?它是可选的/自动调用的吗?似乎只有某些司机需要它.是否会在不需要/支持它的驱动程序上调用它会导致错误?MySQL怎么样?

php mysql pdo bindvalue bindparam

1
推荐指数
1
解决办法
2140
查看次数

bind_param()在mysqli中究竟做了什么?

我正在使用PHP和mysqli理解预处理语句.我试着阅读一些教程,手册和这个:PHP中的Bind_Param,但是.但没有找到任何令人满意的anser.

有人在回答中写道:

__CODE__.

我在教程中找到了一些像这样的代码:

$stmt = $con->prepare("INSERT INTO user_accounts VALUES (?,?,?,?)");

$stmt->bind_param('xyz', $sample1, $sample2, $sample3, $sample4);   // bind to the parameter
Run Code Online (Sandbox Code Playgroud)

我明白我们写'?' 而不是我们的变量,以便以后可以给出实际值.和mysql为查询执行准备一个计划,而不是变量作为参数给出.

但是,请告诉我这段代码是什么意思?

bind_param('xyz', $sample1, $sample2, $sample3, $sample4);  
Run Code Online (Sandbox Code Playgroud)

四个变量以'xyz'作为参数给出......参数'xyz'到底在做什么?有必要写,以后会用吗?我没有发现它在其他地方使用过.

有人能解释一下吗?请帮助.

编辑:

我只想回答这个问题.如果你能解释一下,那么请帮忙:

在此输入图像描述

php mysql mysqli prepared-statement bindparam

1
推荐指数
2
解决办法
2万
查看次数

SqlAlchemy 在 where 子句中包含列表

我在数据库中的表如下

Username    city        Type 
 Anna       Paris        abc 
 Marc       london       abc
 erica      rome         AF 
 Sara       Newyork      cbd 
 silvia      paris        AD
Run Code Online (Sandbox Code Playgroud)

我有一个包含字符串值的列表

typelist = {'abc', 'cbd'}
Run Code Online (Sandbox Code Playgroud)

我想使用 sqlalchemy 查询数据库,从列类型等于列表中的值的表中获取数据:

Username    city        Type 
 Anna       Paris        abc 
 Marc       london       abc
 Sara       Newyork      cbd 
Run Code Online (Sandbox Code Playgroud)

我正在尝试这段代码

sql = "SELECT * FROM table WHERE data IN :values" 
query = sqlalchemy.text(sql).bindparams(values=tuple(typelist))
conn.engine.execute(query)
Run Code Online (Sandbox Code Playgroud)

但它只返回类型列表中的一个值,而不是所有列表值。

Username    city        Type 
 Sara       Newyork      cbd 
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy psycopg2 list bindparam

1
推荐指数
1
解决办法
3746
查看次数