相关疑难解决方法(0)

PDO的查询与执行

他们都做同样的事情,只是区别对待吗?

除了使用prepare之间有什么区别

$sth = $db->query("SELECT * FROM table");
$result = $sth->fetchAll();
Run Code Online (Sandbox Code Playgroud)

$sth = $db->prepare("SELECT * FROM table");
$sth->execute();
$result = $sth->fetchAll();
Run Code Online (Sandbox Code Playgroud)

php pdo

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

我可以在预准备语句中参数化表名吗?

我已多次使用mysqli_stmt_bind_param函数.但是,如果我将我试图防止SQL注入的变量分开,我会遇到错误.

这是一些代码示例:

function insertRow( $db, $mysqli, $new_table, $Partner, $Merchant, $ips, $score, $category, $overall, $protocol )
{
    $statement = $mysqli->prepare("INSERT INTO " .$new_table . " VALUES (?,?,?,?,?,?,?);");
    mysqli_stmt_bind_param( $statment, 'sssisss', $Partner, $Merchant, $ips, $score, $category, $overall, $protocol );
    $statement->execute();
}
Run Code Online (Sandbox Code Playgroud)

是否有可能以某种方式.$new_table.用另一个问号语句替换连接,创建另一个绑定参数语句,或添加到现有的语句以防止SQL注入?

像这样或某种形式:

function insertRow( $db, $mysqli, $new_table, $Partner, $Merchant, $ips, $score, $category, $overall, $protocol )
{    
    $statement = $mysqli->prepare("INSERT INTO (?) VALUES (?,?,?,?,?,?,?);");
    mysqli_stmt_bind_param( $statment, 'ssssisss', $new_table, $Partner, $Merchant, $ips, $score, $category, $overall, $protocol );
    $statement->execute();
}
Run Code Online (Sandbox Code Playgroud)

php mysql sql

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

什么是函数mysql_real_escape_string的PDO等价物?

我使用修改我的代码mysql_*PDO.在我的代码中我有mysql_real_escape_string().在PDO中,这相当于什么?

php mysql pdo sql-injection

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

如何使用准备好的PDO语句设置ORDER BY参数?

我在ORDER BYSQL 的部分使用params时遇到问题.它不会发出任何警告,但不打印任何内容.

$order = 'columnName';
$direction = 'ASC';

$stmt = $db->prepare("SELECT field from table WHERE column = :my_param ORDER BY :order :direction");
$stmt->bindParam(':my_param', $is_live, PDO::PARAM_STR);
$stmt->bindParam(':order', $order, PDO::PARAM_STR);
$stmt->bindParam(':direction', $direction, PDO::PARAM_STR);
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)

:my_param作品,但没有:order:direction.是不是在内部正确转义?我是不是直接插入SQL?像这样:

$order = 'columnName';
$direction = 'ASC';

$stmt = $db->prepare("SELECT * from table WHERE column = :my_param ORDER BY $order $direction");
Run Code Online (Sandbox Code Playgroud)

PDO::PARAM_COLUMN_NAME常数还是等价?

谢谢!

php mysql pdo

33
推荐指数
4
解决办法
5万
查看次数

SQLSTATE [HY093]:参数号无效:未定义参数

// BUILD VALUES
$count = count($matches);
for($i = 0; $i < $count; ++$i) {
    $values[] = '(?)';
}
// INSERT INTO DATABASE
$q = $this -> dbc -> prepare("INSERT INTO hashes (hash) VALUES " . implode(', ', $values) . " ON DUPLICATE KEY UPDATE hash = hash");
$q -> execute($matches);
Run Code Online (Sandbox Code Playgroud)

上面的代码失败,出现以下错误

SQLSTATE [HY093]:参数号无效:未定义参数

虽然count($matches) == count($values)在执行之前就被调用了?

这里发生了什么?

php mysql pdo

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

PDO参数化查询 - 重用命名占位符?

从本质上讲,我有一个值,我必须在我的SQL查询中调用几次.因此,是否可以在语句中重用相同的命名占位符,例如 SELECT :Param FROM Table WHERE Column = :Param,然后简单地使用bindValue(":Param"),并且两者都有值:Params?

php pdo

21
推荐指数
2
解决办法
5052
查看次数

PHP PDO - 绑定表名?

是否可以绑定表名?

我想创建一个类来读取表中的列,并根据字段类型为我生成表单输入.当我这样做时$form = new form("users");,构造函数应该从使用以下代码从表中获取字段名称开始:

class form{

    public function __construct($table, $skip = array("id")){
        $pdo = new PDO('mysql:host=localhost;dbname=site;',USER,PASS);

        $query = $pdo->prepare("DESCRIBE :table");

        $query->bindValue(':table', $table, PDO::PARAM_STR, strlen($table));

        $query->execute();

        while($field = $query->fetch(PDO::FETCH_NUM)){
            var_dump($field);
            echo "<br /><br />";
        }

        unset($pdo);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我在prepare语句中指定"users"而不是":table"时,这很好用,但绑定它正在工作,我很确定这是因为它试图绑定一个表名.此外,这需要绑定,因为我希望能够通过我的表名传递$_GET等等.

php pdo

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

可以在PDO准备语句中参数化哪些令牌?

我正在玩PHP/PDO中的预处理语句.基本查询工作正常,将值传递给WHERE子句:

$stmt = $db->prepare( 'SELECT title FROM episode WHERE id=:id' );
$stmt->bindParam( ':id', $id, PDO::PARAM_INT );
$id = 5;
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)

但是我有一种情况需要为字段名称传递变量.此查询(具有适当的绑定)工作正常:

SELECT :field FROM episode WHERE id=:id
Run Code Online (Sandbox Code Playgroud)

这个给出了一个错误:

SELECT title FROM :field WHERE id=:id
Run Code Online (Sandbox Code Playgroud)

这个没有给出错误,但没有返回任何行:

SELECT title FROM episode WHERE :field=:id
Run Code Online (Sandbox Code Playgroud)

那么,准备好的陈述中哪些东西应该有效?我可以'参数化'字段名称,表名等吗?

php pdo prepared-statement

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

在SQL Server上使用PDO时,为什么不能按列别名进行排序?

注意:以下示例中的唯一区别是ORDER BY子句.

好代码:

$sql = 'SELECT [date], ? AS [name] 
FROM [transactions] 
WHERE [category_id] = 10 
GROUP BY [date] 
ORDER BY [date] ASC';

$stmt = $db->prepare($sql);
$stmt->bindValue(1, 'Test', PDO::PARAM_STR);
$stmt->execute();
$data = $stmt->fetchAll();
//returns rows in $data
Run Code Online (Sandbox Code Playgroud)

不好的代码:

$sql = 'SELECT [date], ? AS [name] 
FROM [transactions] 
WHERE [category_id] = 10 
GROUP BY [date] 
ORDER BY [date] ASC, [name] ASC';

$stmt = $db->prepare($sql);
$stmt->bindValue(1, 'Test', PDO::PARAM_STR);
$stmt->execute();
$data = $stmt->fetchAll();
//returns an empty array
Run Code Online (Sandbox Code Playgroud)

为什么我的第二段代码不起作用?如果我直接运行此查询的任一版本(在SQL Management Studio中),它可以以任何方式工作.如果我摆脱PHP中的问号并将值硬编码到查询中(而不是绑定它),那也是有效的!这里发生了什么? …

php sql sql-server pdo prepared-statement

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

PHP,MY SQL错误查询

我有一个应用程序,它为我的PHP传递一个变量(nomecardapioBD,它接收并记录在变量:nomecardapioBD),这是我想要选择所有行和列的表名.

但通过邮局收到变量无法进行预约.谁能告诉我这部分代码有什么问题?

$query = "Select * FROM :nomecardapioBD ";

  $query_params = array(
        ':nomecardapioBD' => $_POST['nomecardapioBD']
    );

//execute query
try {
    $stmt   = $db->prepare($query);
    $result = $stmt->execute($query_params);
}
catch (PDOException $ex) {
    $response["success"] = 0;
    $response["message"] = "Database Error!";
    die(json_encode($response));
}

// Finally, we can retrieve all of the found rows into an array using fetchAll 
$rows = $stmt->fetchAll();
Run Code Online (Sandbox Code Playgroud)

php mysql pdo

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

标签 统计

php ×10

pdo ×9

mysql ×5

prepared-statement ×2

sql ×2

sql-injection ×1

sql-server ×1