Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.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_Sql - Fatal编程技术网

如何在php中显示查询结果

如何在php中显示查询结果,php,mysql,sql,Php,Mysql,Sql,我知道如何显示集合查询,但我需要输入、运行语句并显示结果。以下是我所拥有的: HTML: 我还想让声明只读,这样就没有人能弄乱我的桌子。 我对此有点陌生,我可能需要一些额外的解释你好,亲爱的,请尝试此代码。我希望它对你有用 <?php ob_start(); $host="localhost"; // Host name $username="root"; // Mysql username $password="Passw0rd"; // Mysql password $db_na

我知道如何显示集合查询,但我需要输入、运行语句并显示结果。以下是我所拥有的:

HTML:

我还想让声明只读,这样就没有人能弄乱我的桌子。
我对此有点陌生,我可能需要一些额外的解释

你好,亲爱的,请尝试此代码。我希望它对你有用

<?php
ob_start();
$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password="Passw0rd"; // Mysql password 
$db_name="time_tracker"; // Database name 

// Connect to server and select databse.
mysql_connect($host, $username,"")or die("cannot connect"); 
mysql_select_db($db_name)or die("cannot select DB");

// Define $sqlstatement
if(isset($_POST['create']))
{
$sqlstatement=$_POST['sqlstatement']; 
echo $sqlstatement;
}

ob_end_flush();
?>

 <form name="form3" method="post" action="">
<input name="sqlstatement" type="text" value="Test" style="width: 340px;">
<input type="submit" name="create" value="Create">
</form>

要检索列名和结果集,请查看以下问题:

具体而言,此代码段应帮助您打印结果:

// Print the column names as the headers of a table
echo "<table><tr>";
for($i = 0; $i < mysql_num_fields($result); $i++) {
    $field_info = mysql_fetch_field($result, $i);
    echo "<th>{$field_info->name}</th>";
}

// Print the data
while($row = mysql_fetch_row($result)) {
    echo "<tr>";
    foreach($row as $_column) {
        echo "<td>{$_column}</td>";
    }
    echo "</tr>";
}

echo "</table>";
//将列名打印为表的标题
回声“;
对于($i=0;$iname}”;
}
//打印数据
while($row=mysql\u fetch\u row($result)){
回声“;
foreach($行作为$列){
回显“{$\u column}”;
}
回声“;
}
回声“;
现在,也就是说,在继续之前,请非常非常小心。看起来您对PHP不熟悉,您的尝试非常危险,因为它打开了一个典型的SQL注入漏洞:

您可以通过将登录用户的数据库权限限制为只读($username和$password),来限制损坏的可能性。不要以root用户身份登录-从不


如果此表单仅对管理员可用,为什么不给他们一个真正的SQL IDE,如Toad或SQL Server Management Studio?

首先,您不应该通过表单输入传递SQL语句,这是非常不安全的。其次,使用新的
mysqli.*
或pdo

相反,您可以使用一个表单来执行某些操作,例如创建联系人

您可以使用一个简单的表单:

<form method="post" action="link/to/script.php">
    <input type="text" name="first_name"/>
    <input type="text" name="last_name"/>
    <input type="email" name="email"/>
    <input type="submit" name="create_contact"/>
</form>
现在获取数据库中联系人的列表(数组)并将其输出

$sql="SELECT * FROM cotacts"; // SQL statement
$result=mysqli_query($con,$sql); //Do query
$row=mysqli_fetch_array($result,MYSQLI_ASSOC); //Fetch array

//Output array
foreach($row as $contact){
    echo $contact['firstname'];
    echo $contact['lastname'];
    echo $contact['email'];
    }

绝不允许用户或任何人运行SQL,因为他们将自己键入

在数据库中创建一个privileges列,然后在SQL查询中使用WHERE和,作为建议,PDO语句非常容易掌握,并且比常规SQL更安全

$query = "SELECT type, name FROM something WHERE user = :user AND privlages = 2 ";
$query_params = array(':user' => $user ); 
try{$stmt = $db->prepare($query); $yourArgs= $stmt->execute($query_params);} 
catch(PDOException $ex){} 
$stmt->execute();
$yourArgs = $stmt->fetchAll();
//call array wherever
foreach($yourArgs as $key => $row){
   $type = $row['type'];
   $name = $row['name'];
}
此外,要创建PDO连接,请执行以下操作:

 $options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', PDO::ATTR_PERSISTENT => true); 
 try {$db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options);} 
 catch(PDOException $ex) {die("Failed to connect to the database: " . $ex->getMessage());}   
 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
 $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 

获取结果。您不应该通过表单输入传递SQL语句,这是非常不安全的。您应该将驱动程序更新为
mysqli
pdo
,而不是
mysql.*
。另外,变量不需要用双引号括起来。这就是只读部分的作用,这将仅适用于管理问题:如何输出查询结果或如何让用户仅执行
select
s?两者都有,但我的优先级是outputYou's。这是我已经有的。如果我要在文本字段中放入sql语句,我希望它返回一个查询,换句话说,如果我要打开phpmyadmin并在表上运行select语句,我将看到查询,无论我选择了哪个表。有没有一种方法可以根据我运行的查询自动获取列标题?但如果没有插入查询,数据如何插入数据库和选择查询不可能告诉我您也想将文本字段值插入数据库…?我的第一反应是说“停止您正在做的事情,您可能弊大于利”,但有时我们不能告诉我们的老板。我唯一的希望是,这不是一个面向公众的网站,你的用户群只有良好的意图。这是我工作的公司内部的。我在我的用户表中有一个管理列,并进行验证。当我尝试var dump时,我得到类型为(mysql结果)的
资源(4)
当运行
SELECT*FROM Users
@RobertHolden时,您是否尝试了我链接到的SO中的代码?
$sql="SELECT * FROM cotacts"; // SQL statement
$result=mysqli_query($con,$sql); //Do query
$row=mysqli_fetch_array($result,MYSQLI_ASSOC); //Fetch array

//Output array
foreach($row as $contact){
    echo $contact['firstname'];
    echo $contact['lastname'];
    echo $contact['email'];
    }
$query = "SELECT type, name FROM something WHERE user = :user AND privlages = 2 ";
$query_params = array(':user' => $user ); 
try{$stmt = $db->prepare($query); $yourArgs= $stmt->execute($query_params);} 
catch(PDOException $ex){} 
$stmt->execute();
$yourArgs = $stmt->fetchAll();
//call array wherever
foreach($yourArgs as $key => $row){
   $type = $row['type'];
   $name = $row['name'];
}
 $options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', PDO::ATTR_PERSISTENT => true); 
 try {$db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options);} 
 catch(PDOException $ex) {die("Failed to connect to the database: " . $ex->getMessage());}   
 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
 $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);