我今天有一个网站被黑了.服务器日志返回类似黑客的尝试:
www.site.com/notifications.php?PID=7&id=999999.9%20union%20all%20select%20%28select%20distinct%20concat%280x7e%2C0x27%2Cunhex%28Hex%28cast%28schema_name%20as%20char%29%29% 29%2C0x27%2C0x7e%29%20from%20%60information_schema%60.schemata%20limit%201%2C1%29%2C0x31303235343830303536%2C0x31303235343830303536%2C0x31303235343830303536--
但我在我的代码中使用了mysql_real_escape_string():
if (isset($_GET['id']) && $_GET['id'] != '') {
$id = mysql_real_escape_string($_GET['id']);
} else {
$id = '';
}
if ($id == '') {
$stmt = "SELECT * FROM tbln13 ORDER BY id DESC";
} else {
$stmt = "SELECT * FROM tbln13 WHERE id = $id";
}
$NewsResult = mysql_query($stmt) or die (mysql_error());
Run Code Online (Sandbox Code Playgroud)
为什么我的网站无法阻止此次攻击?
我有一个用PHP编写的Web应用程序.我想在用户评论中找到所有网址,并将其更改为可点击的链接.我搜索了很多网站和页面,发现下面的解决方案(不幸的是我没有找到它的参考链接):
<?php
function convert($input) {
$pattern = '@(http)?(s)?(://)?(([a-zA-Z])([-\w]+\.)+([^\s\.]+[^\s]*)+[^,.\s])@';
return $output = preg_replace($pattern, '<a href="http$2://$4">$0</a>', $input);
}
?>
Run Code Online (Sandbox Code Playgroud)
这段代码完全归功于它的作者.但我发现其中有一个我无法解决的错误.
如果检测到的URL开始小号字母(无HTTPS),该HREF值不会有š性格和HTTP将变更为HTTPS,而内部的文字是正确的.
示例:
source.com >><a href="https://ource.com">source.com</a>
你有解决这个bug的任何解决方案吗?
我需要计算 MySQL 中一个巨大表中的总行数。我正在用两种形式的 PHP 和 PDO 编写代码。请告诉我哪个可以更快?使用 COUNT() 函数,还是计算返回的总行数?
方法一:
$sql = "SELECT id FROM tbl_users";
$q = $db->prepare($sql);
$q->execute(array());
$rows = $q->rowCount();
Run Code Online (Sandbox Code Playgroud)
方法二:
$sql = "SELECT COUNT(id) as c FROM tbl_users";
$q = $db->prepare($sql);
$q->execute(array());
$result = $q->fetch();
$rows = $result['c'];
Run Code Online (Sandbox Code Playgroud)
先感谢您。
我使用键值对在PHP中定义了一个数组,如下所示:
$myArray = (
'item1' => 'val1',
'item2' => 'val2',
'item3' => 'val3'
);
Run Code Online (Sandbox Code Playgroud)
但每当我需要使用数字索引使用此数组中的一个存储值时$myArray[1],我得到以下错误:
注意:未定义的偏移量:1 ...
以前我虽然在定义数组成员时总是会创建数字索引,但现在这个错误告诉我我错了.
我的问题是:我们不能在PHP中使用键值对创建的数组上使用数字索引吗?