PHP - 轻松从数据库中选择 mysql

标签 php mysql

我正在使用此代码根据表格结果在数据库中进行轻松搜索

class Data {
     public $vin = null;

     public function __construct( $data = array() ) {
         if( isset( $data['vin'] ) ) $this->vin = stripslashes( strip_tags( $data['vin'] ) );
     }

     public function storeFormValues( $params ) {
        $this->__construct( $params ); 
     }

     public function fetchByVin() {
         $success = false;
         try{
            $con = new PDO( DB_HOST, DB_USER, DB_PASS ); 
            $con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
            $sql = "SELECT * FROM evidence_vin WHERE vin = :vin LIMIT 1";

            $stmt = $con->prepare( $sql );
            $stmt->bindValue( "vin", $this->vin, PDO::PARAM_STR );
            $stmt->execute();

            $valid = $stmt->fetchColumn();


            if( $valid ) {
                $success = true;
            }
                echo "<table>";
                echo "<th>Progress</th>";
                echo "<th>Claim number</th>";
                echo "<th>Make</th>";
                echo "<th>Status</th>";
                echo "<th>View</th>";
                while ($row = $stmt->fetch()){
                    echo "<tr>";
                    echo "<td>24</td>";
                    echo "<td>".$row['claim_number']."</td>";
                    echo "<td>".$row['licence']."</td>";
                    echo "<td>".$row['country']."</td>";
                    echo "<td>".$row['vin']."</td>";
                    echo "<td><a href=\"detail.php?id=".$row["id"]."&action=detail\">detail</td>";
                    echo "</tr>";
                     } 
                }catch(PDOExeption $e){
                $e->getMessage();
                }
                echo "</table>"; 
             return $success;
         }

我的表单如下所示:

   <form method="post" action="">
        <p class="input_description">
        Search by VIN
        </p>
        <p class="input_field"> 
        <input type="text"  maxlength="30" required autofocus name="vin">
        </p>
        <input type="submit" value="Search" name="send">
        </div>
        </form>
<?php
    $data = new Data;
    $usr->storeFormValues( $_POST );

    if( $usr->fetchByVin() ) {
        echo "Prebehne presmerovanie....";    
    } else {
        echo "VIN nebolo nájdene";    
    }
}
    }
    else {
    echo "Prosím prihláste sa <a href='login.php'> TU </a>";
    }
?>

有人可以告诉我我做错了什么以及为什么它只显示我的空白表格,没有任何值,尽管我搜索实际上在数据库中的 vin?

最佳答案

您错过了文件末尾的 }Data 类。

您应该始终在文件的开头添加:

error_reporting(E_ALL);
ini_set('display_errors','1');

显示所有错误。

编辑

其他可能的错误:

PDO 中未选择数据库

$data = new Data;
$usr->storeFormValues( $_POST );
...

$usr 在这里没有定义,因为对象是 $data

当然还有这个 PHP 代码:

<?php
$data = new Data;
$usr->storeFormValues( $_POST );

if( $usr->fetchByVin() ) {
echo "Prebehne presmerovanie....";
} else {
echo "VIN nebolo nájdene";
}
}
}
else {
echo "Prosím prihláste sa <a href='login.php'> TU </a>";
}
?>

无效(太多结束 })

编辑2

请查看以下工作代码:

<?php

error_reporting(E_ALL);
ini_set('display_errors','1');


define('DB_HOST', 'mysql:host=localhost;dbname=testdb');
define('DB_USER', 'root');
define('DB_PASS', '');

class Data
{
    public $vin = null;

    public function __construct($data = array())
    {
        if (isset($data['vin'])) {
            $this->vin = stripslashes(strip_tags($data['vin']));
        }
    }

    public function storeFormValues($params)
    {
        $this->__construct($params);
    }

    public function fetchByVin()
    {
        $success = false;
        try {
            $con = new PDO(DB_HOST, DB_USER, DB_PASS);
            $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $sql = "SELECT * FROM evidence_vin WHERE vin = :vin LIMIT 1";

            $stmt = $con->prepare($sql);
            $stmt->bindValue("vin", $this->vin, PDO::PARAM_STR);
            $stmt->execute();

            $row = $stmt->fetch();


            if ($row === false) {
                return false;
            }

            $success = true;

            echo "<table>";
            echo "<th>Progress</th>";
            echo "<th>Claim number</th>";
            echo "<th>Make</th>";
            echo "<th>Status</th>";
            echo "<th>View</th>";
            echo "<tr>";
            echo "<td>24</td>";
            echo "<td>" . $row['claim_number'] . "</td>";
            echo "<td>" . $row['licence'] . "</td>";
            echo "<td>" . $row['country'] . "</td>";
            echo "<td>" . $row['vin'] . "</td>";
            echo "<td><a href=\"detail.php?id=" . $row["id"] . "&action=detail\">detail</td>";
            echo "</tr>";

        } catch (PDOExeption $e) {
            $e->getMessage();
        }
        echo "</table>";
        return $success;
    }
}

?>


    <form method="post" action="">
        <p class="input_description">
            Search by VIN
        </p>

        <p class="input_field">
            <input type="text" maxlength="30" required autofocus name="vin">
        </p>
        <input type="submit" value="Search" name="send">
        </div>
    </form>

<?php
if (!empty($_POST)) {
    $data = new Data;
    $data->storeFormValues($_POST);

    if ($data->fetchByVin()) {
        echo "Vin found - details above";
    } else {
        echo "VIN not found";
    }
}
?>

它消除了所有错误以及 fetchColumn 方法的使用。这段代码运行良好。然而,它仍然不是按函数回显数据并返回 bool 的最佳方式。如果数据不同于 false,您应该返回数据并检查主文件。

关于PHP - 轻松从数据库中选择 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25242739/

相关文章:

由于 json,PHP 无法加载 Memcached 扩展?

python - 如何在 python 中从 peewee 调用 mysql 过程

mysql - 无法启动 MySql 服务

MySQL 一张或多张表适用于不同的产品类型?

mysql - 加入条件困难的地方

php - 如何动态加载MathJax?

php - 为什么这个功能会失败?

php - WooCommerce - 获取购物车中产品的选定变体

php - 根据另一个结果的总数对 MySQL 结果进行排序

mysql - Kohana v3 ORM 基于不同表的 Select 和 Where 子句