我只想将变量"$ read"定义为数据库中的值.我怎样才能做到这一点?
$read = "SELECT `read` FROM `users` WHERE `id` = '$id'";
Run Code Online (Sandbox Code Playgroud) 是否有可能拦截给定SqlCommand将在数据库上执行的查询?
我想跟踪我的Data类调用的所有查询的调试目的,并且找不到一个聪明的方法来执行此操作.
我试图使用一些奇怪的"替换"sql命令字符串,或者附加一个时髦的参数
sb.AppendLine("@" + p.ParameterName + " = " + p.ToDebugString());
Run Code Online (Sandbox Code Playgroud)
("ToDebugString()"是一个扩展方法,它使用或不使用单引号执行"ToString()",具体取决于它是否为字符串)
但这似乎有点不专业,当它遇到一个时它就会失败
SqlDbType.Structured
Run Code Online (Sandbox Code Playgroud)
参数.
或多或少,我想以与SqlServer Profiler在数据库本身内部相同的方式拦截应用程序内部的数据库调用.
先感谢您.
大编辑:
我知道给出一个像这样的简单查询:
SELECT * FROM MyTable WHERE ID=@ID
Run Code Online (Sandbox Code Playgroud)
而不是像这样运行它:
SELECT * FROM MyTable WHERE ID=1234
Run Code Online (Sandbox Code Playgroud)
数据库实际上运行如下过程:
DECLARE @ID int
SET @ID = 1234
SELECT * FROM MyTable WHERE ID=@ID
Run Code Online (Sandbox Code Playgroud)
我可以在应用程序级拦截最后一个块吗?
我有一个页面来激活用户点击我发送的电子邮件中的激活链接,该电子邮件包含一个使用GET方法发布电子邮件地址的网址,我的代码如下,但我要求的是这是一个安全的方法或者是有什么方法可以改进吗?谢谢
$username = $_GET['email'];
mysql_query("UPDATE users SET active = 'yes'
WHERE email = '$username'") or die('oops!');
echo "<meta http-equiv=\"refresh\" content=\"0;URL=/index.php?msg=active\">";
Run Code Online (Sandbox Code Playgroud) 我在过去的几周里一直在学习PHP和MySQL,现在我刚刚听说准备好的语句和PDO/mysqli.我做了一些阅读,人们说的东西像:
$getFromDatabase = mysql_query("SELECT * FROM table WHERE userid='$id'");
while($row = mysql_fetch_assoc($getFromDatabase)){
stuff();
}
Run Code Online (Sandbox Code Playgroud)
......将不再适用.我在代码中经常使用这样的东西.我也在阅读很多关于预备语句如何更好地防止注入的内容.我已经彻底了解它是如何更好的,但它是否更好,值得切换远离mysql_real_escape_string()?是否有必要切换到Mysqli或PDO?在什么情况下,mysql_real_escape_string()可以绕过准备好的语句不能的地方?
我这里有一个代码,用于从数据库中选择所有数据,这是我的代码:
<?php
$name = $_POST['cname'];
if ($_POST["Search"] == "Search") {
$query = mysql_query("SELECT * FROM parts WHERE cname LIKE '%$name%'");
if (!empty($query)) {
$vsi = 'No Data';
$date = 'No Data';
$cname = 'No Data';
}
while ($row = @mysql_fetch_array($query)) {
$vsi = $row["vsi"];
$date = $row["date"];
$cname = $row["cname"];
}
Run Code Online (Sandbox Code Playgroud)
这是我如何回应所有变量,
<tr class="gradeC">
<?php echo "<td width='10%'><font size='-2'> $vsi </font></td>" ?>
<?php echo "<td width='20%'><font size='-2'>$date</font></td>" ?>
<?php echo "<td width='20%'><font size='-2'> $cname</font></td>" ?>
</tr>
Run Code Online (Sandbox Code Playgroud)
我的问题是,
我只从每一行得到一个结果,但我在数据库中的数据是5.
这是我的结果
vsi …Run Code Online (Sandbox Code Playgroud) 嗨,我试图找到如何修复我的查询以返回正确的结果.这是我的查询:
$selectShoeRatingQuery = "SELECT cast(round(AVG(rating)*2)/ 2 as decimal(10,1)) FROM rating WHERE shoe_id = '$_GET[id]'";
$shoeRating = mysql_query($selectShoeRatingQuery);
Run Code Online (Sandbox Code Playgroud)
查询应返回一个带小数位的数字(3.5).它在PhpMyAdmin中测试时工作正常,但是在我的网站上返回resource id #8.
数据库连接一切正常.
我正在使用如下的PDO声明
select * from `admine_user` where `user_id` = ? and passw = ?
$resultfm1 = DB::instance()->prepare($query)->execute
(array($escapedid,$hashedpass))->fetchAll();
Run Code Online (Sandbox Code Playgroud)
我在考虑使用
select * from `admine_user` where `user_id` = :user and passw = :pwd
$resultfm1 = DB::instance()->prepare($query)->execute
(array(":user"=>$escapedid,":pwd"=>$hashedpass))->fetchAll();
Run Code Online (Sandbox Code Playgroud)
以上语句中哪些更好用,可以有效防止SQL注入,因为现在我无法使用 mysql_real_escape_string