使用php将废弃的变量插入到mysql表中

时间:2014-11-21 19:21:20

标签: php mysql

我一直在寻找一个非常简单的数据库,它有4列。第一个是自动执行的本地int,第二个是单个数字ID int,第三个是另一个INT,第四个是报废变量(字符串)。我遇到的问题是实际插入3个变量。

我在for循环结束时将$charIDs变量增加1,这在我正在抓取的网址中使用。 $server变量只是一个静态int,而$trimmedName变量是我从每个网页中抓取的实际文本,并且效果很好。

for($i = 1; $i <= 5; $i++){
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, "http://website.com/asddas/asda/search?=$charIDs");
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true);

$content = curl_exec($ch);

$dom = new DOMDocument();
$dom->loadHTML($content);

$xpath = new DOMXPath($dom);

$tags = $xpath->query('//*[@id="div_contents"]/div[2]/div[2]/div[2]/div[1]/dl/dd/span/text()');
foreach ($tags as $tag) {
    trim($name = $tag->nodeValue);
}
if ($name != null){

$trimmedName = trim($name);

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "INSERT INTO players (serverID, charID, charName)
VALUES ('$server', '$charIDs', '$trimmedName')";

$conn->close();
$name = null;
$trimmedName = null;
}
$charIDs++;
}

我检查了变量,表名等,我不确定它为什么不起作用。我可以手动将行插入数据库。

2 个答案:

答案 0 :(得分:2)

以下是我注意到你的剧本的一些事情。

1)您没有执行查询,这是一个大问题 2)您仍然应该使用参数化查询 3)为什么要在每次迭代时重新创建mysqli和语句对象。

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "INSERT INTO players (serverID, charID, charName) VALUES (?,?,?)";
$stmt = $conn->prepare($sql);

if (!$stmt) {
    die('could not create statement: ' . $conn->error);
}

for($i = 1; $i <= 5; $i++){
    // curl and XML stuff here
    $binded = $stmt->bind_param('iis', $server, $charIDs, $trimmedName);
    if ($binded) {
        echo ($stmt->execute() ? 'Inserted' : 'Did not insert');
    }
    $charIDs++;
}

$conn->close();

答案 1 :(得分:1)

这看起来相当明显,但我没有看到你执行SQL语句的任何地方。我无法评论这是多么安全,因为你没有提供包含变量的东西。希望您将best practices纳入您的数据

$sql = "INSERT INTO players (serverID, charID, charName)
VALUES ('$server', '$charIDs', '$trimmedName')";
$conn->query($sql);