【问题标题】:Using PHP variables inside MYSQL stored queries在 MYSQL 存储查询中使用 PHP 变量
【发布时间】:2012-04-24 17:10:38
【问题描述】:

我在发布之前进行了搜索,但没有找到我的问题的答案。

我在数据库中有一个存储查询的表,例如(将 php 变量存储在数据库中):

select * from accounts where type = 'client'
select * from accounts where user_id = $userid
select * from accounts where name = '$name'

我假设当我从数据库中提取特定查询时,PHP 会识别该变量并替换它,但它会将其视为常规文本。

有没有办法让 PHP 将 $__ 替换为存在的实际变量?我想也许是 eval() 函数??

【问题讨论】:

标签: php mysql variables storage


【解决方案1】:

您可以尝试将其用作准备好的语句。因此,如果您的数据库存储的查询如下所示:

select * from accounts where type = 'client'
select * from accounts where user_id = ?
select * from accounts where name = ?

你使用这样的 PDO 准备语句:

$pdo = new PDO($dsn, $user, $pass);
$statement = $pdo->prepare($secondOfTheAboveQueries);
$statement->execute(array($userId));
$account = $statement->fetch();

如果您必须一次处理几个带有各种变量的语句,您还可以使用带有命名变量(如 user_id = :userid)的预准备查询,而不是问号。

您可能还想考虑使用类似的存储过程。两者的解释可以在这里找到:

http://php.net/manual/en/pdo.prepared-statements.php

【讨论】:

    【解决方案2】:

    假设您从数据库中提取查询:

    $string = ''; // Assign the real userID
    
    while ($fetch = mysql_fetch_array($query)) {
    
        $newQuery = str_replace('$userid', $string, $fetch['your_row_name']); 
    } 
    

    我不确定这是否可行,但这是我首先要尝试的...

    【讨论】:

    • 我刚刚意识到可能使用 sprintf 也可以完成这项工作
    【解决方案3】:

    sprint 似乎运作良好。而不是将它们存储为 $variable,我可以使用 %s 等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-01
      • 1970-01-01
      • 2011-03-31
      • 2017-12-10
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多