如何使用SQL查询中的查询进行查询

时间:2015-07-10 23:17:30

标签: php mysql

好的,这么复杂的标题,让我解释一下。

我试图将SQL查询插入到我的SQL数据库中,例如

mysqli_query($queryfromabove);

然后从另一个PHP文件开始,我会做这样的事情:

  $sql="INSERT INTO awards(name,image,query,clm,type,number)    VALUES ('".$_POST['name']."','".$_POST['image']."','".$_POST['query']."','".$_POST['column']."','".$_POST['condition']."','".$_POST['number']."')";
    mysqli_query($conn,$sql);

问题是PHP变量没有通过。 (它存在于我称之为的文件中)我知道这是非常不正统的,可能不推荐,但有没有人知道这样做?

根据要求提供实际代码:

SELECT * FROM crts WHERE id='$crtid'

我已经回复了所有的POSTS并且知道他们有正确的数据。这里重要的POST变量是$ _POST [' query'],因为它包含:

    $that = mysqli_fetch_assoc(mysqli_query($conn,"SELECT * FROM awards WHERE id=2"));
echo $that['query'].'<br>';
$crtid = $_SESSION['crt']['id'];
$query = $that['query'];
$thisquery = mysqli_query($conn,$query);
$finally = mysqli_fetch_assoc($thisquery);
print_r($finally);

然后,从另一个文件(借口草率变量名称,这是一个WIP):

var from, to;

$(document).on("change", "#from", function() {

// Reset the To date

  $('#to').datepicker('setDate', null);

});

$(document).on("change", "#to", function() {

// Get the dates

  from = document.getElementById('from').value;
  to   = document.getElementById('to').value;

});

ID 2是我用所有帖子插入的sql结果的id。

2 个答案:

答案 0 :(得分:2)

使用准备好的声明。将以下内容放入DB:

INSERT INTO sample_db(query) VALUES ('SELECT * FROM users WHERE id=?')

然后,当你想要执行它时,首先准备它,将参数绑定到变量,然后执行它。

$stmt = mysqli_prepare($conn, $queryfromabove);
mysqli_stmt_bind_param($stmt, "s", $userID);
mysqli_stmt_execute($stmt);

如果您需要能够替换任意变量,可以使用preg_replace_callback将字符串中的所有{$variable}替换为相应全局变量的值。

$sql = preg_replace('/\{\$(\w+)\}/', function($matches) use ($conn) {
    return mysqli_real_escape_string($conn, $GLOBALS[$matches[1]]);
}, $queryfromabove);
mysqli_query($conn, $sql);

答案 1 :(得分:0)

允许存储SQL查询字符串会使您的数据库遭受恶意攻击。请考虑使用存储过程 - 这是MySQL的一个示例。 http://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-stored-procedures.html