我可以在php中的db WHERE中选择*后运行函数吗?
我想在WHERE之后使用函数 像这样就行了我可以在php中的db WHERE中选择*后运行函数吗?,php,url,Php,Url,我想在WHERE之后使用函数 像这样就行了 $sql = "SELECT * FROM Prodotti WHERE Id=10"; 如果我想让id出现在URL链接中怎么办? 链接示例如下: 这样就不行了 $sql = "SELECT * FROM Prodotti WHERE strpos($fullUrl, signup=Id)"; 您可以从url获取注册参数,如下所示: $signup = $_GET['signup']; 然后在查询中使用它: $sql = "SELECT * FR
$sql = "SELECT * FROM Prodotti WHERE Id=10";
如果我想让id出现在URL链接中怎么办?
链接示例如下:
这样就不行了
$sql = "SELECT * FROM Prodotti WHERE strpos($fullUrl, signup=Id)";
您可以从url获取注册参数,如下所示:
$signup = $_GET['signup'];
然后在查询中使用它:
$sql = "SELECT * FROM Prodotti WHERE Id = '$signup'";
但是这是不安全的,我建议您也在google上搜索“php mysql准备好的语句”您可以使用superglobal获得
id
:
$id = (int) $_GET['signup']; // (int) makes sure it is an integer and no string
现在,为了使其在查询中工作,首先需要确保输入的安全性。
您可以通过使用使输入安全,但由于您需要的是整数而不是字符串,因此最好使用
在您的查询中,您可以
$sql = "SELECT * FROM `Prodotti` WHERE `Id` = $id";
在表名和列名周围使用反勾号以防止mysql保留字错误
准备好的报表示例:
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$id = (int) $_GET['signup'];
if ($stmt = $mysqli->prepare("SELECT * FROM `Prodotti` WHERE `Id` = ?")) {
/* bind parameters for markers */
$stmt->bind_param("i", $id);// i for integer s for string
/* execute query */
$stmt->execute();
/* bind result variables */
$stmt->bind_result($district);
/* fetch value */
$stmt->fetch();
// Do something with the fetched data
/* close statement */
$stmt->close();
}
research
$\u-GET
您可以通过$\u-GET['signup']strpos获得注册。strpos
不是mysql函数,因此它不起作用。@IslamElshobokshy虽然这是有效的,但它对SQL注入是开放的。请不要直接传递该值。使用准备好的语句并验证输入。为什么不建议首选方法而不是显示错误的代码示例呢?虽然此解决方案有效,但SQL注入极易受到攻击。考虑修改这个例子来提供额外的安全性…这是安全的可怕建议,提示出现在函数名mysqli\u real\u escape\u**string**
@Script47中,也就是说最好使用prepared语句,但为什么您首先会建议使用错误的代码?@Script47对于本例来说可能不正确,但最好知道OP通常可以保护用户输入。了解不同方法的存在也是很好的。了解不同的方法是非常好的,但当它们被不正确地使用时就不行了。此外,对于准备好的语句来说,转义是毫无意义的。