๊ด€๋ฆฌ ๋ฉ”๋‰ด

C-log

๐ŸฌMySQL&๐Ÿ˜PHP : ๋Œ๊ณ ๋ž˜์™€ ์ฝ”๋ผ๋ฆฌ์˜ ์ƒ์„ฑ ๋ณธ๋ฌธ

Server/๐ŸฌMySQL&๐Ÿ˜PHP

๐ŸฌMySQL&๐Ÿ˜PHP : ๋Œ๊ณ ๋ž˜์™€ ์ฝ”๋ผ๋ฆฌ์˜ ์ƒ์„ฑ

4:Bee 2023. 10. 6. 12:29
728x90

php์™€ MySQL์˜ ๊ธ€ ์ƒ์„ฑ์„ ํ•˜๊ธฐ ์•ž์„œ ๋จผ์ € ์ด ๋‘˜ ์‚ฌ์ด์—์„œ ๋ฒŒ์–ด ์งˆ ์ˆ˜ ์žˆ๋Š” ์—๋Ÿฌ๋ฅผ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž.

mysqli_error(), mysqli_connect_errno()

<?php
mysqli_report(MYSQLI_REPORT_OFF);
// mysql์— ์ ‘์†ํ•˜๊ฒ ๋‹ค๋Š” ํ•จ์ˆ˜์ด๋‹ค.
$conn = mysqli_connect("localhost", "root", "1024", "phpmysql");
$sql =  "
INSER INTO topic 
  (title, description, created)
    VALUE(
      'MySQL',
      'MySQL is ..',
      NOW()
    )
";

$result = mysqli_query($conn, $sql);
if ($result === false) {
  echo mysqli_error($conn);
}

์œ„์˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์šฐ๋ฆฌ๋Š” $sql์—์„œ ์–ด๋–ค ๋ถ€๋ถ„์ด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋ฌผ๋ก  ์šฐ๋ฆฌ๊ฐ€ echo๋ฅผ ํ†ตํ•ด์„œ ์™ธ๋ถ€์ ์œผ๋กœ ์˜ค๋ฅ˜๊ฐ€ ์–ด๋””๊ฐ€ ๋‚ฌ๋Š”์ง€ ๋„์ถœ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Š” ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ๊ณต๊ฒฉ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ•ญ์ƒ ๋‚ด๋ถ€์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ฐ์ถฐ์•ผ ํ•œ๋‹ค. mysqli_connect_errno()๋Š” ์•ž์„œ ์šฐ๋ฆฌ๊ฐ€ ๋ฐฐ์› ๋˜ mysqli_connect()ํ•จ์ˆ˜์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์—๋Ÿฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์ข€ ๋” ๋ฉด๋ฐ€ํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์งœ๊ฒŒ ๋œ๋‹ค๋ฉฐ ์œ„์™€ ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ถ€๋ถ„์„ ๋”์šฑ ์ž˜ ์ฐพ์•„ ๋‚ผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

mysqli_report(MYSQLI_REPORT_OFF);

ํ•ด๋‹น ํ•จ์ˆ˜๋Š” ์ธ์œ„์ ์œผ๋กœ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ๋•Œ 'Fatal error...'๋ผ๋Š” ๊ตฌ๋ฌธ์ด ๋‚˜์˜ค์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์˜ˆ์ „ ๋ฒ„์ „์—์„œ๋Š” MYSQLI_REPORT_OFF๊ฐ€ ์ดˆ๊ธฐ๊ฐ’์ด์˜€์œผ๋‚˜ ํ˜„์žฌ๋Š” MYSQLI_REPORT_ALL์ด ์ดˆ๊ธฐ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๊ตฌ๋ฌธ์„ ์‹œ์ž‘ํ•˜๋Š” ๋ถ€๋ถ„์— ์‚ฝ์ž…์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.


๊ธ€์ƒ์„ฑํ•˜๊ธฐ

์ด์ œ ์šฐ๋ฆฌ๋Š” php์™€ MySQL์„ ํ†ตํ•ด์„œ ๊ธ€์„ ์ƒ์„ฑํ•ด๋ณผ ๊ฒƒ์ด๋‹ค. ์šฐ์„  create.php๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ธ€์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์„ฑ์„ ๊ฐ–์ถ”์–ด์•ผํ•œ๋‹ค. ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>WEB</title>
</head>

<body>
  <h1>WEB</h1>
  <ol>
    <li>HTML</li>
  </ol>
  <form action="process_create.php" method="POST">
    <p><input type="text" name="title" placeholder="title"></p>
    <p><textarea name="description" placeholder="description"></textarea></p>
    <p><input type="submit"></p>
  </form>
</body>

</html>

์—ฌ๊ธฐ์„œ ์ฃผ์˜ ๊นŠ๊ฒŒ ๋ณด์•„์•ผํ•˜๋Š” ๊ฒƒ์€ formํƒœ๊ทธ์˜ action์†์„ฑ์ด๋‹ค. action์†์„ฑ์ด๋ž€ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ ๋ณด๋‹ ๋•Œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ๋„์ฐฉํ•  URL์ด๋‹ค. action์†์„ฑ์„ ์ด์šฉํ•ด์„œ ์šฐ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋„์ฐฉํ•  php๋Š” process_create.php์ด๋ฏ€๋กœ phpํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์ค€๋‹ค. ์ดํ›„ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

<?php
mysqli_report(MYSQLI_REPORT_OFF);
$conn = mysqli_connect(
  'localhost',
  'root',
  '******',
  'phpmysql'
);

$sql = "
  INSERT INTO topic(title, description, created)
  VALUES(
    '{$_POST['title']}',
    '{$_POST['description']}',
    NOW()
  )
";
mysqli_query($conn, $sql);
echo $sql;

์œ„์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ formํƒœ๊ทธ๋ฅผ ๋‹ค์‹œ ๋ณด๋ฉด fromํƒœ๊ทธ์•ˆ์— input๊ณผ textareaํƒœ๊ทธ์˜ name์„ ๋ณด๋ฉด ์šฐ๋ฆฌ๊ฐ€ process_create.php์—์„œ ์ƒ์„ฑํ•œ VALUES์˜ ๋ฐ์ดํ„ฐ ๊ฐ’๋“ค์˜ ์ด๋ฆ„์ด ์ผ์น˜ํ•œ๋‹ค. ์ฆ‰, formํƒœ๊ทธ๋ฅผ ์›น๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด์„œ ์ž…๋ ฅํ•˜๊ณ  ์ด๋ฅผ POST๋ฐฉ์‹์œผ๋กœ ์ „๋‹ฌํ•ด์„œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ ๊ฐ’๋“ค์„ ๋„˜๊ฒจ ๋ฐ›์•„ ์ฒซ ๋ฒˆ์งธ๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์™€ ๋™์ผํ•˜๊ฒŒ mysqli๋ฅผ ์‚ฌ์šฉํ•ด์„œ MySQL์„ ์ƒ์„ฑํ•œ๋‹ค. ์ƒ์„ฑ์ด ๋˜์—ˆ๋Š”์ง€๋Š” ์•„๋ž˜ MySQL monitor๋ฅผ ํ†ตํ•ด์„œ ํ™•์ธํ•ด๋ณด์ž.

MariaDB [phpmysql]> DELETE FROM topic;
Query OK, 3 rows affected (0.004 sec)

MariaDB [phpmysql]> SELECT * FROM topic;
+----+-------+--------------+---------------------+
| id | title | description  | created             |
+----+-------+--------------+---------------------+
|  4 | MySQL | MySQL is ... | 2023-10-06 11:56:21 |
+----+-------+--------------+---------------------+
1 row in set (0.000 sec)

๊ธฐ์กด์— ์ƒ์„ฑํ•œ ๋ฐ์ดํ„ฐ๋“ค๊ณผ ๊ตฌ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด์„œ DELETE FROM topic์„ ์‚ฌ์šฉํ•ด์„œ ๋ชจ๋‘ ์ง€์šฐ๊ณ  ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋กœ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณธ ๊ฒƒ์ด๋‹ค. MySQL monitor๋ฅผ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ ๊ฐ’์ด ์ž˜ ์ƒ์„ฑ๋œ ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

์šฐ๋ฆฌ๊ฐ€ ์•ž์„œ์„œ ์—๋Ÿฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ด์•ผ๊ธฐ ํ–ˆ์—ˆ๋‹ค. ์ด ์ฝ”๋“œ์—์„œ๋„ ์—๋Ÿฌ๋ฅผ ํ™•์ธํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋ณผ ๊ฒƒ์ด๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€๊ฒฝํ•ด๋ณด๋ฉด ๋œ๋‹ค.

error_log()

$result = mysqli_query($conn, $sql);
if ($result === false) {
  echo '์ €์žฅํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋ฌธ์˜ํ•ด์ฃผ์„ธ์š”.';
  error_log(mysqli_error($conn));
} else {
  echo '์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.<a href="index.php">๋Œ์•„๊ฐ€๊ธฐ</a>';
}
echo $sql;

์œ„์˜ ์ฝ”๋“œ์—์„œ error_log()ํ•จ์ˆ˜๋กœ ์šฐ๋ฆฌ๋Š” echo๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์–ด๋””์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ๋‚ด๋ถ€์ ์œผ๋กœ log๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์ด๋Š” Apache Logs๋ฅผ ํ†ตํ•ด์„œ ํ™•์ผ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

์ด๋ ‡๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์›น๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด์„œ ์ƒ์„ฑํ•˜๊ณ  ์—๋Ÿฌ๋ฅผ ์ปจํŠธ๋กค ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ตฌํ˜„ํ•ด ๋ณด์•˜๋‹ค. ์ด์ œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ์Šคํ‚ค๋งˆ๋“ค์„ ์„ ํƒํ•ด์„œ ํ•ด๋‹น ํŽ˜์ด์ง€๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ์„ ๊ตฌํ˜„ ํ•  ๊ฒƒ์ด๋‹ค.

728x90
Comments