标签: bindvalue


如何在LIMIT子句中应用bindValue方法?

这是我的代码的快照:

$fetchPictures = $PDO->prepare("SELECT * 
    FROM pictures 
    WHERE album = :albumId 
    ORDER BY id ASC 
    LIMIT :skip, :max");

$fetchPictures->bindValue(':albumId', $_GET['albumid'], PDO::PARAM_INT);

if(isset($_GET['skip'])) {
    $fetchPictures->bindValue(':skip', trim($_GET['skip']), PDO::PARAM_INT);    
} else {
    $fetchPictures->bindValue(':skip', 0, PDO::PARAM_INT);  
}

$fetchPictures->bindValue(':max', $max, PDO::PARAM_INT);
$fetchPictures->execute() or die(print_r($fetchPictures->errorInfo()));
$pictures = $fetchPictures->fetchAll(PDO::FETCH_ASSOC);
Run Code Online (Sandbox Code Playgroud)

我明白了

您的SQL语法有错误; 检查与MySQL服务器版本对应的手册,以便在第1行的"15",15'附近使用正确的语法

似乎PDO在SQL代码的LIMIT部分中为我的变量添加单引号.我查了一下我发现了这个我认为相关的错误:http: //bugs.php.net/bug.php?id = 44639

这就是我在看的东西吗?这个bug自2008年4月开始!在此期间我们应该做什么?

我需要构建一些分页,并且需要在发送sql语句之前确保数据是干净的,sql注入安全的.

php mysql sql pdo bindvalue

112
推荐指数
5
解决办法
6万
查看次数

bindValue()和bindParam()之间的混淆?

我这两个功能之间的混淆Bindvalue()BindParam()

  1. 我在php.net看它不逃避%_,所以使用时要小心LIKE.所以我认为BindValue()在使用LIKE查询时不会使用.
  2. 当我们使用LIKE查询时BindParam().因为我知道BindParam可以逃避这些%_.
  3. BindValue()没有防止sql注入.我不确定这个,是真的吗?

朋友告诉我在这3点中提到的是对还是错.我是PDO的初学者所以请清楚解释一下..

php pdo bindvalue bindparam

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

如何在PDOStatement :: bindValue()中定义变量类型?

PDOStatement对象:: bindValue()方法提供了一种方式来指定绑定的变量的类型:

PDOStatement :: bindValue($ parameter,$ value [,$ data_type = PDO :: PARAM_STR ])

我想知道,指定数据类型的目的是什么,而当作为default(PARAM_STR)离开时,数据库最终会在使用它之前将值转换为正确的类型?

例如,如果您对INTEGER字段进行了以下查询:

INSERT INTO table (integerField) VALUES (?) ;
SELECT * FROM table WHERE integerField = ?  ;
Run Code Online (Sandbox Code Playgroud)

并且您在PHP中绑定一个整数,PDO默认将它绑定为一个字符串,这相当于:

INSERT INTO table (integerField) VALUES ("1") ;
SELECT * FROM table WHERE integerField = "1"  ;
Run Code Online (Sandbox Code Playgroud)

这将完美地工作,因为SQL数据库(至少MySQL,我真的不知道它将如何在其他RDBMS上工作)知道如何在使用它之前将字符串转换回整数.

有哪些用例会对绑定的类型参数与字符串产生影响?

php sql pdo pdostatement bindvalue

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

如何在PDO中使用%的bindValue?

$query = $connect->prepare("SELECT users.firstname, users.lastname, users.id 
FROM users INNER JOIN users_friends ON users.id=users_friends.uID
WHERE bID=:USER AND type =:type AND accepted = '1' AND (users.firstname LIKE '%:queryString%' OR users.lastname LIKE '%:queryString%') 
LIMIT 10");
$query->bindValue(":queryString", $queryString);
$query->bindValue(":type", $type);
$query->bindValue(":USER", $USER);
$query->execute();
Run Code Online (Sandbox Code Playgroud)

这就是我所拥有的.

我尝试bindValue然后在预准备语句中使用它时出错(%:queryString%)

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens'
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

php pdo bindvalue

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

PDO PHP bindValue不起作用

我知道这已被问过1000次了,但由于某种原因,我继续在墙上再次敲打我的脑袋.

这有效:

$sql = 'SELECT a.eventCode, a.eventTime, a.teamCode, a.playerCode, b.lastName, b.firstName, b.number, a.xCoord, a.yCoord, a.id ';
$sql = $sql . 'FROM events a, players b ';
$sql = $sql . 'WHERE a.regGUID in ( ' . $regGUID . ' ) and ';
$sql = $sql . 'a.playerCode=b.playerCode and a.gameCode = "' . $game . '" order by a.eventTime desc, a.actionCode asc'; 
$stmt = $db->prepare($sql);
$results = $stmt->execute();
Run Code Online (Sandbox Code Playgroud)

这不是:

$sql = 'SELECT a.eventCode, a.eventTime, a.teamCode, a.playerCode, b.lastName, b.firstName, b.number, a.xCoord, a.yCoord, …
Run Code Online (Sandbox Code Playgroud)

php mysql pdo bindvalue

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

在PDO :: bindValue()中使用显式数据类型有什么意义?

使用显式数据类型有PDO::bindValue()什么意义?

例如,在以下任何一种形式中都会有 SQLSTATE[HY000]: General error: 1366 Incorrect integer value: 'a'

$pdos->bindValue(':Value_For_An_Int_Col', 'a');//default arg for the third and opt par is  PDO::PARAM_INT

$pdos->bindValue(':Value_For_An_Int_Col', 'a', PDO::PARAM_INT);
Run Code Online (Sandbox Code Playgroud)

php mysql pdo placeholder bindvalue

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

'where in'子句中的PDO绑定值不起作用

我试图使用"where in"子句获取顶级信息但如果我使用bindvalue或bindparam我没有得到任何结果.

这是我的查询没有给出任何结果

$user2 = $db->prepare("Select top 100 memb_guid,memb___id,mail_addr,Gender,Country from MEMB_INFO where memb___id in (Select memb___id from MEMB_STAT where IP = :ip)");
$user2->bindValue(':ip','127.0.0.1',PDO::PARAM_STR);
$user2->execute();
Run Code Online (Sandbox Code Playgroud)

如果我使用没有任何绑定值或参数的直接搜索,我会得到结果

$user2 = $db->prepare("Select top 100 memb_guid,memb___id,mail_addr,Gender,Country from MEMB_INFO where memb___id in (Select memb___id from MEMB_STAT where IP = '127.0.0.1')");
$user2->execute();
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我在这个搜索'where in'子句中使用bindvalue或param吗?

@PhilCross这是我在使用var_dump时得到的:

object(PDOStatement)#4 (1) { ["queryString"]=> string(142) "Select top 100 memb_guid,memb___id,mail_addr,Gender,Country from MEMB_INFO where memb___id in (Select memb___id from MEMB_STAT where IP = :ip)"
Run Code Online (Sandbox Code Playgroud)

Ps:我正在使用MSSQL Server

php sql pdo where bindvalue

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

bindParam和bindValue不起作用?

我正在尝试建立一个注册/登录系统.要检查是否未使用用户名和电子邮件地址,我使用此:

$username = $_POST['uLogin'];
    $usernameLC = strtolower($username);
    $query1 = $db0->query("SELECT userLogin FROM tbuser WHERE userLogin=':login';");
    $query1->bindValue(":login", $usernameLC, PDO::PARAM_STR);
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我可以使用相同的用户名创建尽可能多的用户.通过扩展,它也不会让我连接到网站,因为它没有绑定值或任何东西,所以它无法将我的用户名与数据库中的用户名进行比较.

当我像这样使用它时,验证用户名是否有效

$username = $_POST['uLogin'];
    $usernameLC = strtolower($username);
    $query1 = $db0->query("SELECT userLogin FROM tbuser WHERE userLogin='$usernameLC';");
Run Code Online (Sandbox Code Playgroud)

但这不是正确的方法:/

有人可以帮忙吗?:)

php mysql pdo bindvalue

3
推荐指数
2
解决办法
416
查看次数

如何使用bindvalue和%准备语句?

是的,当我尝试在之前看起来像这样的变量上使用bindvalues时,我遇到了问题:

users.firstname LIKE '$firstname%'
Run Code Online (Sandbox Code Playgroud)

现在它看起来像这样:

users.firstname LIKE ':firstname%'
Run Code Online (Sandbox Code Playgroud)

但它不起作用,也试过这个:

users.firstname LIKE :firstname%
Run Code Online (Sandbox Code Playgroud)

并得到一些语法错误..

对此有什么正确的解决方案?我还想在bindValue中添加%(:firstname,$ firstname%),但我还需要在其他地方使用:firstname,不应该有%..

谢谢你

sql pdo bindvalue

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

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
查看次数

PHP - bindValue()的PDO问题

我正在编写一个以编程方式创建给定某些列名称的表的类.我正在使用PDO准备的语句,这似乎导致了一些问题.

这是基本程序:

// create a query string to be sent to $pdo->prepare
$sql =
'CREATE TEMP TABLE :tmp_table_name (
  :person_id bigint,
  :encntr_id bigint,
  :prsnl_id bigint,
  :program_detail text,
  :program_name text
);';
$stmt = $pdo->prepare($sql);

// Bind table name
$stmt->bindValue(':tmp_table_name', 'tmp_patients', PDO::PARAM_STR);

// Bind column names
$columnNames = [
  'person_id',
  'encnt_id',
  'prsnl_id',
  'program_detail',
  'program_name',
];
foreach($columnNames as $name) {
    $stmt->bindValue(':'.$name, $name, PDO::PARAM_STR);
}

$ret = $stmt->execute();
// $ret is false! The statement fails.
Run Code Online (Sandbox Code Playgroud)

这是$stmt->errorInfo()[2]显示的内容:

ERROR:  syntax error at or near …
Run Code Online (Sandbox Code Playgroud)

php postgresql pdo prepared-statement bindvalue

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

使用bindValue的预准备语句不起作用

我是PHP的新手,我正在努力获得准备好的声明.这是我在大学的最后一年项目,我记得读过准备好的陈述是很好的做法,也适合SQL注入.但是,以下代码给出了Server 500错误.

<?php
    $email = "blah@blah.co.uk";
    $hash = "somerandomhashedpassword";
    $db = new mysqli("localhost", "root", "1234", "UEAnetwork");    
    $sql = "INSERT INTO Students (Email, Password) VALUES (?,?)";
    $stmt = $db->prepare($sql);
    $stmt->bindValue(1, $email);
    $stmt->bindValue(2, $hash);           
    if ($stmt->execute()) {
        echo "You have registered!!!!!!!!!!!!!!!!!!!!!!!!!!!!";
    }
?>
Run Code Online (Sandbox Code Playgroud)

如果我运行以下内容然后插入一行,所以我很确定我正确连接到数据库.

<?php
    $db = new mysqli("localhost", "root", "1234", "UEAnetwork");    
    $sql = "INSERT INTO Students (Email, Password) VALUES ('blah@blah.co.uk','somerandomhashedpassword')";
    $stmt = $db->prepare($sql);         
    if ($stmt->execute()) {
        echo "You have registered!!!!!!!!!!!!!!!!!!!!!!!!!!!!";
    }
?>
Run Code Online (Sandbox Code Playgroud)

我使用bindValue不正确吗?我已经看到它在网上的许多教程中使用这种方式,但我一定做错了.

php prepared-statement bindvalue

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