<?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'
,它会给我结果。
答案 0 :(得分:4)
永远不要使用字符串连接或替换来将值放入SQL语句中;这会给你格式化问题(如你所见)并允许SQL injection attacks。
相反,请使用参数:
$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();
答案 1 :(得分:0)
$result = $db->query('SELECT * FROM wifinTb WHERE mac=$mac');
目前被视为一个长串。您可以通过将其更改为:
来快速解决此问题$result = $db->query("SELECT * FROM wifinTb WHERE mac='" . $mac . "'");
但是,您最好阅读PDO或mysqli绑定函数,而不是像这样注入。
希望有帮助吗?
答案 2 :(得分:0)
使用$mac
初始化'test'
的内容,您正在做的是将''
或""
内的任何内容作为字符串分配给{{{ 1}}。该字符串的值为$mac
。因此,您仍然需要使用test
''