Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我想在数据库中执行保存的查询_Php_Mysql - Fatal编程技术网

Php 我想在数据库中执行保存的查询

Php 我想在数据库中执行保存的查询,php,mysql,Php,Mysql,我想执行保存在数据库中的查询,如下所示: ID | NAME | QUERY 1 | show_names | "SELECT names.first, names.last FROM names;" 2 | show_5_cities | "SELECT cities.city FROM city WHERE id = 4;" 这可能吗? 我有点不懂php,所以请解释一下这是否可行。如果确实创建了存储过程/函数,您只需使用: mysql_query("Call p

我想执行保存在数据库中的查询,如下所示:

ID | NAME          | QUERY
 1 | show_names    | "SELECT names.first, names.last FROM names;"
 2 | show_5_cities | "SELECT cities.city FROM city WHERE id = 4;"
这可能吗?
我有点不懂php,所以请解释一下这是否可行。

如果确实创建了存储过程/函数,您只需使用:

mysql_query("Call procedure_name(@params)")

那就行了。此处引用:

如果我理解正确,您将查询保存在数据库中的一个表中,并希望执行这些查询

分解问题:您有两项任务要做:

  • 在数据库中查询要运行的查询
  • 执行该查询
  • 这有点像meta,但是meh:)

    警告:PHP中的
    mysql\uuu
    函数已被弃用,在坏人手中可能很危险。

    <?php
    
    if (!$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')) {
        die('Could not connect to mysql');
    }
    
    if (!mysql_select_db('mysql_dbname', $link)) {
        die('Could not select database');
    }
    
    $name   = "show_5_cities"; // or get the name from somewhere, e.g. $_GET.
    $name = mysql_real_escape_string($name); // sanitize, this is important!
    $sql    = "SELECT `query` FROM `queries` WHERE `name` = '$name'"; // I should be using parameters here...
    $result = mysql_query($sql, $link);
    
    if (!$result) {
        die("DB Error, could not query the database\n" . mysql_error(););
    }
    
    $query2 = mysql_fetch_array($result);
    // Improving the code here is an exercise for the reader.
    $result = mysql_query($query2[0]);
    
    ?>
    

    查询表以获取查询,然后执行该查询并循环查询结果并输出字段

    <?php
    
    $link = mysqli_connect("localhost", "my_user", "my_password", "world");
    
    /* check connection */
    if (mysqli_connect_errno()) 
    {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }
    
    $RequiredQuery = intval($_REQUEST['RequiredQuery']);
    $sql    = "SELECT `QUERY` FROM QueryTable WHERE ID = $RequiredQuery";
    $result = mysqli_query($link, $sql);
    
    if ($row = mysqli_fetch_assoc($result)) 
    {
        $sql    = "SELECT `QUERY` FROM QueryTable WHERE ID = $RequiredQuery";
        $result = mysqli_query($link, $row['QUERY']);
    
        while ($row2 = mysqli_fetch_assoc($result)) 
        {
            foreach($row2 AS $aField=>$aValue)
            {
                echo "$aField \t $aValue \r\n";
            }
        }
    }
    
    ?>
    

    只需打开该表,并在变量中获取单个查询,如

    $data = mysql_query('SELECT * FROM <the Table that contains your Queries>');
    
    while(($row = mysql_fetch_row($data)) != NULL)
    {
        $query = $row['Query'];
        mysql_query($query);   // The Query from the Table will be Executed Individually in a loop
    
    }
    
    $data=mysql\u查询('SELECT*FROM');
    while(($row=mysql\u fetch\u row($data))!=NULL)
    {
    $query=$row['query'];
    mysql_query($query);//表中的查询将在一个循环中单独执行
    }
    

    如果要从表中执行单个查询,您必须使用
    WHERE
    子句选择查询。

    为什么您有将查询存储在数据库中的想法?@YourCommonSense将查询存储在数据库中是一种快速创建用户自定义报告系统的方法,如果他们有自己想要运行的查询。您似乎有某种强烈的错觉。重复+1只需确保您可以信任此处的查询,在插入之前进行清理。