इसे आजमाएं। मेरे परीक्षण से स्थानीय रूप से (डीबी के बिना) सही लग रहा था।
$n_req = 0;
$_POST['usuario'] = 'test';
$_POST['resumo'] = 'test2';
$_POST['status'] = 'test3';
if (!empty($_POST['usuario'])) {
$req_usuario = $_POST['usuario'];
$where[] = " usuario = ? ";
$params[] = $req_usuario;
$n_req++;
}
if (!empty($_POST['resumo'])) {
$req_resumo = $_POST['resumo'];
$where[] = " resumo = ? ";
$params[] = $req_resumo;
$n_req++;
}
if (!empty($_POST['status'])) {
$req_status = $_POST['status'];
$where[] = " status = ? ";
$params[] = $req_status;
$n_req++;
}
$sql_where = !empty($where) ? ' where ' . implode(' and ', $where) : '';
echo $sql_where;
$tot = mysqli_prepare($con, "SELECT * FROM solicitacoes $sql_where");
if(!empty($params)) {
//foreach($params as $param) {
// mysqli_stmt_bind_param($tot, "s", $param);
//echo $param;
//}
$params = array_merge(array($tot),
array(str_repeat('s', count($params))),
array_values($params));
print_r($params);
call_user_func_array('mysqli_stmt_bind_param', $params);
// adapated from https://stackoverflow.com/questions/793471/use-one-bind-param-with-variable-number-of-input-vars and http://www.pontikis.net/blog/dynamically-bind_param-array-mysqli may need to be altered
}
echo "SELECT * FROM solicitacoes $sql_where";
mysqli_execute($tot);
यदि सभी तीन मान भरे हुए हैं तो आपकी क्वेरी
. होनी चाहिए
?
बाद में प्रक्रिया में ड्राइवर द्वारा मूल्यों के साथ पॉप्युलेट किया जाता है। यह उपयोगकर्ता(ओं) को SQLs प्रसंस्करण में हेरफेर करने के लिए दुर्भावनापूर्ण कोड जोड़ने से रोकता है।
https://www.owasp.org/index.php /SQL_Injection_Prevention_Cheat_Sheet#Defense_Option_1:_Prepared_Statements_.28Parameterized_Queries.29
मैं SQL को कैसे रोक सकता हूं PHP में इंजेक्शन?
मैंने यह भी नहीं देखा कि $funcao
. कहां है सेट किया गया था..
आप mysqli
पर कमेंट कर सकते हैं कोड क्या करता है यह देखने के लिए इको लाइनों को फ़ंक्शन और डिकम्मेंट करें। इस तरह मैंने पुष्टि की कि क्वेरी उम्मीद के मुताबिक बनाई जा रही हैं।