나는 정수 배열을 가지고 있는데, 각각을 (PHP에서) mysql 질의에 어떻게 사용합니까?
PHP나는 정수 배열을 가지고 있는데, 각각을 (PHP에서) mysql 질의에 어떻게 사용합니까?
배열에 임의의 콘텐츠 항목 ID가 가득 찼습니다. 배열에있는 각 ID를 사용하여 mysql 쿼리 (배열의 id는 WHERE 절에 있음)를 실행해야합니다. 배열의 순서대로 나타납니다. 어떻게하면 좋을까요?
배열의 각 개별 ID에 대한 UPDATE 쿼리입니다.
해결법
-
==============================
1.거의 모든 "PHP 내에서 SQL을 수행하는 방법"과 마찬가지로 - 준비된 문을 사용해야합니다. 그다지 어렵지 않습니다.
거의 모든 "PHP 내에서 SQL을 수행하는 방법"과 마찬가지로 - 준비된 문을 사용해야합니다. 그다지 어렵지 않습니다.
$ids = array(2, 4, 6, 8); // prepare an SQL statement with a single parameter placeholder $sql = "UPDATE MyTable SET LastUpdated = GETDATE() WHERE id = ?"; $stmt = $mysqli->prepare($sql); // bind a different value to the placeholder with each execution for ($i = 0; $i < count($ids); $i++) { $stmt->bind_param("i", $ids[$i]); $stmt->execute(); echo "Updated record ID: $id\n"; } // done $stmt->close();
또는 다음과 같이 할 수 있습니다.
$ids = array(2, 4, 6, 8); // prepare an SQL statement with multiple parameter placeholders $params = implode(",", array_fill(0, count($ids), "?")); $sql = "UPDATE MyTable SET LastUpdated = GETDATE() WHERE id IN ($params)"; $stmt = $mysqli->prepare($sql); // dynamic call of mysqli_stmt::bind_param hard-coded eqivalent $types = str_repeat("i", count($ids)); // "iiii" $args = array_merge(array($types), $ids); // ["iiii", 2, 4, 6, 8] call_user_func_array(array($stmt, 'bind_param'), ref($args)); // $stmt->bind_param("iiii", 2, 4, 6, 8) // execute the query for all input values in one step $stmt->execute(); // done $stmt->close(); echo "Updated record IDs: " . implode("," $ids) ."\n"; // ---------------------------------------------------------------------------------- // helper function to turn an array of values into an array of value references // necessary because mysqli_stmt::bind_param needs value refereces for no good reason function ref($arr) { $refs = array(); foreach ($arr as $key => $val) $refs[$key] = &$arr[$key]; return $refs; }
필요에 따라 다른 필드에 대한 매개 변수 자리 표시자를 더 추가하십시오.
어느 것을 골라야합니까?
왜 준비된 진술입니까?
긴 루프에서는 준비된 명령문을 사용하고 일반 SQL을 보내는 것 사이의 실행 시간 차이가 눈에 띄게됩니다.
-
==============================
2.네가 쫓아 온 것일 수도있어.
네가 쫓아 온 것일 수도있어.
$ids = array(2,4,6,8); $ids = implode($ids); $sql="SELECT * FROM my_table WHERE id IN($ids);"; mysql_query($sql);
그렇지 않으면 무엇이 잘못 되었습니까?
$ids = array(2,4,6,8); foreach($ids as $id) { $sql="SELECT * FROM my_table WHERE ID = $id;"; mysql_query($sql); }
-
==============================
3.아멘, 진술에 대한 Tomalak의 의견.
아멘, 진술에 대한 Tomalak의 의견.
그러나 mysqli를 사용하지 않으려는 경우 intval ()을 사용하여 주입을 방지 할 수 있습니다.
$ids = array(2, 4, 6, 8); for ($i = 0; $i < count($ids); $i++) { mysql_query("UPDATE MyTable SET LastUpdated = GETDATE() WHERE id = " . intval($ids[$i])); }
-
==============================
4.
$values_filtered = array_filter('is_int', $values); if (count($values_filtered) == count($values)) { $sql = 'update table set attrib = 'something' where someid in (' . implode(',', $values_filtered) . ');'; //execute } else { //do something }
-
==============================
5.당신은 다음과 같은 것을 할 수있다. 그러나 배열에 정수 만이 들어 있어야한다는 것을주의해야한다. 그렇지 않으면 SQL 인젝션으로 끝날 수있다.
당신은 다음과 같은 것을 할 수있다. 그러나 배열에 정수 만이 들어 있어야한다는 것을주의해야한다. 그렇지 않으면 SQL 인젝션으로 끝날 수있다.
도움이 될만한 콘텐츠를 얻으려면 여러 쿼리를 수행하고 싶지는 않습니다. 이 같은 것은 당신이 겪은 것이 될 수 있습니다.
foreach ($array as $key = $var) { if ((int) $var <= 0) { unset($array[$key]); } } $query = "SELECT * from content WHERE contentid IN ('".implode("','", $array)."')"; $result = mysql_query($query);
from https://stackoverflow.com/questions/330268/i-have-an-array-of-integers-how-do-i-use-each-one-in-a-mysql-query-in-php by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
PDO PHP에서 쿼리 오류를 보는 방법 (0) | 2018.09.17 |
---|---|
PDO를 사용하여 헬퍼 함수 삽입 / 업데이트 (0) | 2018.09.17 |
PHP - MySQL 연결이 작동하지 않음 : 2002 해당 파일이나 디렉토리가 없습니다. (0) | 2018.09.17 |
PHP에서 업로드 된 파일 형식을 확인하는 방법 (0) | 2018.09.17 |
Javascript 배열 전달 -> PHP (0) | 2018.09.17 |