0
<?php
/**
 * Simple example of extending the SQLite3 class and changing the __construct
 * parameters, then using the open method to initialize the DB.
 */
class MyDB extends SQLite3
{
    function __construct()
    {
        $this->open('wifin.db');
    }
}
$db = new MyDB();

$mac = 'test';
$ssid = $_POST['ssid'];
$lat = $_POST['lat'];
$lon = $_POST['lon'];

$db->exec("INSERT INTO wifinTb (mac,ssid,lat,lon) VALUES ($mac,$ssid,$lat,$lon)");

$result = $db->query('SELECT * FROM wifinTb WHERE mac=$mac');

var_dump($result->fetchArray());

?>

我不知道如何在 php5 中使用变量,$mac 应该是一个字符串,当我直接使用时mac=$mac,它返回我 bool(false),这意味着找不到,但是当我使用时mac='test',它会给我结果。

4

3 回答 3

4

永远不要使用字符串连接或替换将值放入 SQL 语句中;这会给您带来格式问题(如您所见)并允许SQL 注入攻击

相反,使用参数:

$stmt = $db->prepare('INSERT INTO wifinTb(mac,ssid,lat,lon) VALUES (?,?,?,?)');
$stmt->bindValue(1, 'test');
$stmt->bindValue(2, $_POST['ssid']);
$stmt->bindValue(3, $_POST['lat']);
$stmt->bindValue(4, $_POST['lon']);
$stmt->execute();

$stmt = $db->prepare('SELECT * FROM wifinTb WHERE mac = :mac');
$stmt->bindValue(':mac', $mac);
$result = $stmt->execute();
于 2013-10-12T15:19:21.850 回答
0
$result = $db->query('SELECT * FROM wifinTb WHERE mac=$mac');

目前被视为一根长串。您可以通过将其更改为:

$result = $db->query("SELECT * FROM wifinTb WHERE mac='" . $mac . "'");

但是,您最好阅读 PDO 或 mysqli 绑定函数,而不是像那样注入。

希望有帮助吗?

于 2013-10-12T11:49:04.747 回答
0

您用 初始化$mac'test'就是将字符串(PHP 识别内部的任何内容''""作为字符串)分配给$mac. 该字符串的值为test。因此,您仍然需要将查询中的值括在''

$db->exec("INSERT INTO wifinTb (mac,ssid,lat,lon) VALUES ('$mac','$ssid','$lat','$lon')");
于 2013-10-12T11:49:08.503 回答