相关疑难解决方法(0)

PHP PDO“选择喜欢”查询

我正在尝试将两个参数绑定到准备好的 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 次我的参数值和名称,它们都很好。

我不明白为什么这不适用于两个参数。请指教。

php mysql pdo

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

Laravel 5.2从迁移创建数据库

无论如何我可以从迁移设置(创建)数据库?我想运行migrate和seed,但事先应该首先创建数据库.

有什么建议 ?

谢谢

laravel

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

用PHP变量创建MySQL表

我正在尝试创建一个表,其名称是变量中存储的值的值$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'了它从代码中进一步获得它的价值.

任何帮助都会很棒!

php mysql

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

PHP/MYSQL - 使用准备好的语句删除数据库

我想使用 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)

它有效。

我想知道为什么准备好的语句不起作用,以及第二个查询是否受到保护。

提前感谢您的想法!

php pdo drop-database

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

使用bindValue()的PDO查询方法似乎不起作用

它永远不会起作用。当我对 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)

php mysql oop data-binding pdo

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

PHP 的 PDO 准备语句:我可以多次使用一个占位符吗?

我想执行以下查询:

    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 占位符执行数组,这对我来说看起来有点愚蠢。

这是在准备好的语句的多个位置使用一个占位符的唯一方法吗?

php mysql pdo placeholder prepared-statement

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

PDO wordpress查询

我一直在

错误: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 database wordpress pdo

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

PDO bindParam问题

可能重复:
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)

所以现在我真的没有看到问题出在哪里.有什么指针吗?

php mysql pdo

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

我可以用这种方式编写我的Sql查询吗?

我想知道我可以以这种格式插入表名

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)

插入和删除语句是一样的吗?

java sql prepared-statement

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

php数据库空数组

有谁知道为什么代码返回空数组

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

php mysql database pdo

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

更轻松地访问我的mysqli查询

我有一个连接到数据库的查询,它按设计工作,但我觉得我有更多的代码需要.有人可以帮我吗?

基本上我试图得到多个列的总和,然后为结果分配一个变量.变量必须每次都是唯一的,所以我可以稍后单独回显它们.

是否可以使用数组来选择不同的列,然后使用相同的数组来生成变量?

我希望这一切都有意义我想要实现的目标.

这个例子只有我查询的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)

php mysql mysqli

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

PHP/Sql 中的安全问题

我是初学者。我写了这篇文章,我被告知我的 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)

我该如何解决它?

php sql sql-injection

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

如何在PDO语句中对表名进行参数化?

问题

运行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等重现问题,所以这是一个普遍的问题.我试着用反引号写它,前面有数据库名,两者结合等,没什么用.

这该怎么做 ?

php mysql sql pdo prepared-statement

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