我正在尝试将两个参数绑定到准备好的 PDO 选择语句。这是我到目前为止:
$query = "select * from books where ? LIKE ?";
$result = $db->prepare($query);
$result->bindValue(1, $searchTerm, PDO::PARAM_STR);
$result->bindValue(2, "%$searchValue%", PDO::PARAM_STR);
$result->execute();
$rows = $result->fetchAll(PDO::FETCH_ASSOC);
print_r($rows);
Run Code Online (Sandbox Code Playgroud)
这成功执行,但我没有返回任何行。
但是当我只使用 1 个参数时
$query = "select * from books where title LIKE ?";
$result->bindValue(1, "%$searchValue%", PDO::PARAM_STR);
Run Code Online (Sandbox Code Playgroud)
我得到了返回的行。我已经检查了 1000 次我的参数值和名称,它们都很好。
我不明白为什么这不适用于两个参数。请指教。
无论如何我可以从迁移设置(创建)数据库?我想运行migrate和seed,但事先应该首先创建数据库.
有什么建议 ?
谢谢
我正在尝试创建一个表,其名称是变量中存储的值的值$name.我尝试了很多不同的方法,但似乎没有一个适合我.这是我目前使用的代码:
mysql_connect("localhost", "peltdyou_admin", "123456") or die(mysql_error());
mysql_select_db("peltdyou_orders") or die(mysql_error());
mysql_query("CREATE TABLE '" .$_POST['name']. "' ( name VARCHAR(30), age INT, car VARCHAR(30))");
Run Code Online (Sandbox Code Playgroud)
我知道这与某些事情有关,'" .$_POST['name']. "'但我无法解决问题.我已经尝试'$name'了它从代码中进一步获得它的价值.
任何帮助都会很棒!
我想使用 PDO 删除数据库。
这种方法对我来说是最好的
function delete_db($database)
{
$statement = $my_pdo_obj->prepare("DROP DATABASE IF EXISTS :database");
$statement->bindParam(":database", $database);
$statement->execute();
}
Run Code Online (Sandbox Code Playgroud)
但不幸的是,我收到了一个 PDOException,说我的绑定值 ($database) 附近存在语法错误:
致命错误:未捕获的异常 'PDOException' 带有消息 'SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在“?”附近使用的正确语法。在第 1' 行
所以我尝试按如下方式执行查询
function delete_db($database)
{
$statement = $my_pdo_obj->exec("DROP DATABASE IF EXISTS " . $database);
}
Run Code Online (Sandbox Code Playgroud)
它有效。
我想知道为什么准备好的语句不起作用,以及第二个查询是否受到保护。
提前感谢您的想法!
它永远不会起作用。当我对 sql 查询进行 var 转储时,我发现问号仍然在其中。这意味着这些值还没有被正确绑定?
我不明白为什么它不约束价值观。
有人可以帮我吗?
PHP
$ruleValue = "value1";
$input = "value2";
$inputValue = "value3";
$this->_db->query('SELECT * FROM ? WHERE ? = ?', array($ruleValue, $input, $inputValue));
Run Code Online (Sandbox Code Playgroud)
方法
public function query($sql, $params = array()) {
$this->_error = false;
if($this->_query = $this->_pdo->prepare($sql)) {
$x = 1;
if(count($params)) {
foreach($params as $param) {
$this->_query->bindValue($x, $param);
$x++;
}
}
if($this->_query->execute()) {
$this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
$this->_count = $this->_query->rowCount();
} else {
$this->_error = true;
}
var_dump($this->_query);
}
return $this;
}
Run Code Online (Sandbox Code Playgroud)
变量转储
object(PDOStatement)#5 (1) …Run Code Online (Sandbox Code Playgroud) 我想执行以下查询:
SELECT
*,
(SELECT COUNT(*) FROM `tab2` WHERE `parent` = :id) AS `sum`
FROM `tab1`
WHERE `id` = :id
如您所见,:id占位符在查询中出现了两次。因此,如果我尝试使用以下语句执行此语句:
$q->execute(['id'=>$row_id]);
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number
Run Code Online (Sandbox Code Playgroud)
所以我必须重写准备好的查询并使用 :id1 和 :id2 占位符执行数组,这对我来说看起来有点愚蠢。
这是在准备好的语句的多个位置使用一个占位符的唯一方法吗?
我一直在
错误:SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法中有错误; 查看与您的MySQL服务器版本对应的手册,以便在附近使用正确的语法
请帮忙!=]我已经检查过phpmyadmin中的这个文字查询是否有效.
SELECT *
FROM `wp_customgravityall`
WHERE (`time` >= '2015-09-01 00:00:00' AND `time` <= '2015-09-13 23:59:59')
ORDER BY `wp_customgravityall`.`time` DESC
Run Code Online (Sandbox Code Playgroud)
但我的下面的代码不起作用.
<?php
$servername = "http://www.myhomepagenamethingy.com/";
$username = DB_USER;
$password = DB_PASSWORD;
$dbname = DB_NAME;
$table_name = 'wp_' . 'customgravityall';
$from_date = isset( $_GET['from_date'] ) ? $_GET['from_date'] . " " . "00:00:00" : '';
$to_date = isset( $_GET['to_date'] ) ? $_GET['from_date'] . " " . "23:59:59" : '';
try {
$conn = new PDO('mysql:$servername;dbname=$dbname', $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); …Run Code Online (Sandbox Code Playgroud) 可能重复:
PHP PDO语句是否可以接受表名作为参数?
我班上有一个功能,它有点麻烦.这里的功能
function insert($table,$column = array(),$value = array())
{
$array1 = implode(",", $column);
$array2 = implode(",", $value);
try
{
$sql = $this->connect->prepare("INSERT INTO :table (:date1) VALUES (:date2)");
$sql->bindParam(':table',$table, PDO::PARAM_STR);
$sql->bindParam(':data1',$array1, PDO::PARAM_STR);
$sql->bindParam(':data2',$array2, PDO::PARAM_STR);
$sql->execute();
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
Run Code Online (Sandbox Code Playgroud)
我用以下函数调用该函数:
-> insert('coupons',array('categorie','name','link','code','id'),array('test11','test','test','test','NULL'));
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
警告:PDOStatement :: execute()[pdostatement.execute]:SQLSTATE [HY093]:参数号无效:参数未在第46行的C:\ xampp\htdocs\MYFRAMEWORK\lib\database.class.php中定义
第46行是:
$sql->execute();
Run Code Online (Sandbox Code Playgroud)
所以现在我真的没有看到问题出在哪里.有什么指针吗?
我想知道我可以以这种格式插入表名
String update = "UPDATE ? SET Status = ? WHERE Name = ?";
stmt.setString(1,tableName);
stmt.setString(2,status);
stmt.setString(3,name);
Run Code Online (Sandbox Code Playgroud)
插入和删除语句是一样的吗?
有谁知道为什么代码返回空数组
$name = 'login';
$data = 'user2';
$sql = 'SELECT :name FROM test.users WHERE :name=:data';
$sth = $dbh->prepare($sql);
$sth->execute([':name' => $name, ':name' => $name, ':data' => $data]);
$res = $sth->fetchAll();
var_dump($res);
Run Code Online (Sandbox Code Playgroud) 我有一个连接到数据库的查询,它按设计工作,但我觉得我有更多的代码需要.有人可以帮我吗?
基本上我试图得到多个列的总和,然后为结果分配一个变量.变量必须每次都是唯一的,所以我可以稍后单独回显它们.
是否可以使用数组来选择不同的列,然后使用相同的数组来生成变量?
我希望这一切都有意义我想要实现的目标.
这个例子只有我查询的12个查询中的3个.
$sql = ("SELECT SUM(Case_closed) AS sum_closed FROM production WHERE Datum = '$actual_time' AND jaar = '$year' ");
$result = mysqli_query($connect, $sql) ;
$Case_closed = $result->fetch_object()->sum_closed;
$sql = ("SELECT SUM(Case_handled) AS sum_handled FROM production WHERE Datum = '$actual_time' AND jaar = '$year' ");
$result = mysqli_query($connect, $sql) ;
$Case_handled = $result->fetch_object()->sum_handled;
$sql = ("SELECT SUM(swap) AS sum_swap FROM production WHERE Datum = '$actual_time' AND jaar = '$year' ");
$result = mysqli_query($connect, $sql) ;
$swap = $result->fetch_object()->sum_swap;
Run Code Online (Sandbox Code Playgroud) 我是初学者。我写了这篇文章,我被告知我的 find() 方法存在安全漏洞。我认为我的 queryType 方法的 if else 阻止了 Sql 注入尝试。
public function queryType(string $sql, array $attributes = null)
{
## instance of Database singleton
$this->Database = Database::getInstance();
if($attributes !== null) {
## if attr, prepared request
$query = $this->Database->prepare($sql);
$query->execute($attributes);
return $query;
}else{
## else, simple request
return $this->Database->query($sql);
}
}
## SECURITY ISSUE /!\ ?? queryType if/else doesn't prevent ??
public function find(int $id)
{
return $this->queryType("SELECT * FROM {$this->table} WHERE id = $id")->fetch();
}
Run Code Online (Sandbox Code Playgroud)
我该如何解决它?
运行PDO语句时,我得到一个PDO语法错误,其中表名是参数化的,就像在
$sql = 'DELETE FROM :table_name';
$query = $this->db->prepare($sql);
$query->execute(array(':table_name' => "mytable"));
Run Code Online (Sandbox Code Playgroud)
我可以用SELECT等重现问题,所以这是一个普遍的问题.我试着用反引号写它,前面有数据库名,两者结合等,没什么用.
这该怎么做 ?