Forums / National / Russian / Тех. поддержка / Вопрос по php

Kopusha
#1 2023-05-28 07:55

Использую пока 7.4, но думаю что принципиально нет отличий. Посамоучился немного и такой вопрос возник, например в коде ниже
 

$invite_valid = $db->query("SELECT user_id FROM $db_users WHERE user_invite = ? LIMIT 1", $ruser['user_invite'])->fetch();

//1
$iscontributor = $db->query("SELECT COUNT(*) gru_groupid FROM $db_groups_users WHERE gru_state=0 AND gru_groupid = 9 AND gru_userid=" .$invite_valid)->fetchColumn();

//2
$iscontributor = $db->query("SELECT COUNT(*) gru_groupid FROM $db_groups_users WHERE gru_state=0 AND gru_groupid = 9 AND gru_userid=?", $invite_valid)->fetchColumn();

//3
$iscontributor = $db->query("SELECT COUNT(*) gru_groupid FROM $db_groups_users WHERE gru_state=0 AND gru_groupid = 9 AND gru_userid='".$db->prep($invite_valid)."'");
$iscontributor = $iscontributor->fetchColumn();

Первый вариант совсем плохой?
2-3 какой лучше?
В идеале немного текстом, для общего развития, спс заранее.

Alex300
#2 2023-05-28 10:06

1 вариант cовсем плохой. Нет гарантии что $invite_valid не содержит SQL-инъекции. 2 вариант самый лучший. Там проверка значения и экранирование производится на уровне PDO. 3 тоже пойдет.

Есть миры, не здесь, там, где небеса горят, и моря засыпают, и реки дремлют; люди сделаны из дыма, а города – из песен. Где-то опасность, где-то несправедливость, даже где-то остыл чай. Идем Эйс, у нас много работы!...
...Sorry for my english...
Бесплатные расширения для Cotonti: https://lily-software.com/free-scripts/
Kopusha
#3 2023-05-29 06:39

СПС!
Я интуитивно на 2 переписываю, начинал пет проект еще в 17 году, (но не много писал), так что старый код по вар 1 написан. Нынче - поумнел.

Added 1 hour later:

О, домучаю для себя вопрос

$sql = $db->update($db_groups_users, array('gru_groupid' => 4), "gru_groupid=2 AND gru_userid='".$row['user_id']."'");

Так тоже можно?
Вижу в новой редакции  тоже через ".$row['user_id']."'" а не через ?", $row['user_id'] 

$sql = Cot::$db->update(Cot::$db->groups_users, array('gru_groupid' => COT_GROUP_MEMBERS),
                    "gru_groupid=2 AND gru_userid='".$row['user_id']."'");

 


Dit bericht is bewerkt door Kopusha (2023-05-29 07:57, 10 maanden ago)
Alex300
#4 2023-05-29 08:23

В новой редакции возможно еще не переписано. В целом $row['user_id'] это результат другого запроса из БД и данных вводимых пользователями в нем нет. Но все равно лучше через параметры. См: https://www.cotonti.com/docs/devel/code-style#ch3

Есть миры, не здесь, там, где небеса горят, и моря засыпают, и реки дремлют; люди сделаны из дыма, а города – из песен. Где-то опасность, где-то несправедливость, даже где-то остыл чай. Идем Эйс, у нас много работы!...
...Sorry for my english...
Бесплатные расширения для Cotonti: https://lily-software.com/free-scripts/