0

我正在学习PHP,我精通JavaC。我被分配了一个练习任务来创建一个购物项目。我需要从我的数据库中提取产品。我正在使用产品 ID 来执行此操作。我想过使用 for 循环,但我无法prod_id从数据库中访问它作为检查的条件!有谁能够帮我?!我已经完成了所有的表单处理,但我需要输出产品。这是for我正在使用的 -loop。如果我需要添加更多信息,请告诉我。提前致谢 :)

for($i=1; $i + 1 < prod_id; $i++)
{
   $query = "SELECT * FROM products where prod_id=$i";
}
4

5 回答 5

2
  1. 首先,您应该使用数据库访问驱动程序连接到您的数据库。

  2. 您的查询不应传递给循环。这是非常罕见的情况,需要这种方法。最好正确使用WHERE条件子句。

  3. 要从products表中获取所有行,您可以省略WHERE子句。考虑阅读http://dev.mysql.com/doc上的手册

如果没有 WHERE 子句,该语句将选择所有行。

以下示例适用于MySQLi驱动程序。

// connection to MySQL:
// replace host, login, password, database with real values.
$dbms = mysqli_connect('host', 'login', 'password', 'database');

// if not connected then exit:
if($dbms->connect_errno)exit($dbms->connect_error);

$sql = "SELECT * FROM products";

// executing query:
$result = $dbms->query($sql);

// if query failed then exit:
if($dbms->errno)exit($dbms->error);

// for each result row as $product:
while($product = $row->fetch_assoc()){
    // output:
    var_dump($product); // replace it with requied template
}

// free result memory:
$result->free();

// close dbms connection:
$dbms->close();
于 2013-06-12T05:28:19.040 回答
2

我建议你使用 PDO。此方法将保护您的所有 SQL 并保持所有连接关闭且完好无损。

这是一个例子

例子。 这是您的 dbc 类 (dbc.php)

<?php

class dbc {

    public $dbserver = 'server';
    public $dbusername = 'user';
    public $dbpassword = 'pass';
    public $dbname = 'db';

    function openDb() {    
        try {
            $db = new PDO('mysql:host=' . $this->dbserver . ';dbname=' . $this->dbname . ';charset=utf8', '' . $this->dbusername . '', '' . $this->dbpassword . '');
        } catch (PDOException $e) {
            die("error, please try again");
        }        
        return $db;
    }

    function getproduct($id) {
        //prepared query to prevent SQL injections
        $query = "SELECT * FROM products where prod_id=?";
        $stmt = $this->openDb()->prepare($query);
        $stmt->bindValue(1, $id, PDO::PARAM_INT);
        $stmt->execute();
        $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
        return $rows;
    }    
?>

您的 PHP 页面:

<?php 
require "dbc.php";
for($i=1; $i+1<prod_id; $i++) 
{

$getList = $db->getproduct($i);
//for each loop will be useful Only if there are more than one records (FYI)
foreach ($getList as $key=> $row) {
         echo $row['columnName'] .' key: '. $key;
    }
}
于 2013-06-12T05:39:24.327 回答
0

希望这可以根据您的需要工作..

for($i=1; $i+1<prod_id; $i++) {
   $query  = "SELECT * FROM products where prod_id = $i";
   $result = mysql_query($query);

   while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
         print_r($row);  
   }
}
于 2013-06-12T05:31:49.883 回答
0

我认为您想要表中的所有记录,如果这是您可以轻松做到的要求

$query = mysql_query("SELECT * FROM products"); // where condition is optional   

while($row=mysql_fetch_array($query)){
   print_r($row);
   echo '<br>';
}

这将为每一行打印一个关联数组,您可以访问每个字段,例如

echo $row['prod_id'];
于 2013-06-12T05:33:21.813 回答
0
for($i=1;$i+1<prod_id;$i++) {
    $query = "SELECT * FROM products where prod_id=$i";
    $result = mysqli_query($query, $con);

$con 是数据库连接详细信息,您可以使用 wile loop 循环遍历每一行

    while ($row = mysqli_fetch_array($result))
    {
        ......
    }
}
于 2013-06-12T05:27:14.477 回答