문제

다음 2개의 쿼리를 1개의 쿼리로 어떻게 바꾸나요?

$sql    = "SELECT level FROM skills WHERE id = $id LIMIT 1;";
$result = $db->sql_query($sql);
$level  = (int) $db->sql_fetchfield('level');
$db->sql_freeresult($result);

++$level;

$sql    = "UPDATE skills SET level = $level WHERE id = $id;";
$result = $db->sql_query($sql);
$db->sql_freeresult($result);

나는 그것을 phpBB 모드에서 사용하고 있지만 요점은 레벨을 잡고 레벨을 추가한 다음 업데이트한다는 것입니다. 하나의 쿼리로 수행할 수 있다면 훨씬 더 쉽고 빠를 것 같습니다.

편집하다: $id 이미 정수로 강제 지정되었으므로 이번에는 이스케이프가 필요하지 않습니다.

도움이 되었습니까?

해결책

이것 때문에 다운모드가 됐나요?

$sql = "UPDATE skills SET level = level+1 WHERE id = $id";
$result = $db->sql_query($sql);
$db->sql_freeresult($result);

Teifion의 특정 사례에서 phpBB DDL은 해당 특정 필드를 NOT NULL로 나열하므로 NULL이 증가할 위험이 없습니다.

일반적인 경우에는 0을 나타내기 위해 NULL을 사용하면 안 됩니다.NULL 증가 ~해야 한다 NULL로 답해주세요.당신이 NULL=0이라고 생각하고 키보드에서 벗어나 다른 취미를 찾는 잘못된 개발자라면, 당신은 우리 모두의 삶을 힘들게 만드는 것일 뿐입니다.물론 이것은 컴퓨터 산업인데 누가 당신이 틀렸다고 말할 수 있겠습니까?틀리지 않았다면 사용하세요

$sql = "UPDATE skills SET level = COALESCE(level,0)+1 WHERE id = $id";

...하지만 현실을 직시하자:네가 틀렸어.모두가 레벨 0에서 시작한다면 DDL에는 다음이 포함되어야 합니다.

level INT DEFAULT '0' NOT NULL

프로그래머가 레코드를 생성할 때 설정하는 것을 잊어버린 경우를 대비하여.모든 사람이 레벨 0에서 시작하지 않으면 DEFAULT를 건너뛰고 프로그래머가 생성 시 값을 제공하도록 강제합니다.어떤 사람들이 수준을 넘어서서 수준을 갖는 것이 의미가 없다면, 그 사람의 수준에 동등하게 하나를 더하는 것은 의미가 없습니다.이 경우 DDL에서 NOT NULL을 삭제하세요.

다른 팁

이 방법:

UPDATE skills
SET level = level + 1
WHERE id = $id

PDO 및 준비된 쿼리 사용:

$query = $db->prepare("UPDATE skills SET level = level + 1 WHERE id = :id")
$query->bindValue(":id", $id);
$result = $query->execute();

$sql = "업데이트 스킬 세트 레벨 = 레벨 + 1 WHERE id = $id";

코드의 다른 곳에서 $id를 적절하게 삭제하길 바랍니다!

이 시도

UPDATE skills SET level = level + 1 WHERE id = $id

어떻습니까:

UPDATE skills SET level = level + 1 WHERE id = $id;

매트:그것이 질문에 붙여 넣은 것입니다.편집되지 않았으므로 Markdown의 버그 때문이라고 생각합니다.그런데 이상하게도 나는 눈치챘다.

또한:예, mysql_escape_string()!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top