Current Location: Home> Latest Articles> What Real-World Examples Show That mysqli::kill Can Gracefully Close Database Connections?

What Real-World Examples Show That mysqli::kill Can Gracefully Close Database Connections?

gitbox 2025-09-02
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// This part of the code is unrelated to the article, only for demonstration</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Starting script...\n"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
<p><hr></p>
<p><h2>What real-world examples show how <code>mysqli::</span>kill<span>

2. Closing Abnormally Disconnected Sessions

Sometimes, when a client disconnects unexpectedly, the MySQL backend thread may remain active, wasting resources. By using mysqli::kill, you can schedule cleanup of these “ghost” threads to maintain a healthy connection pool.

<span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span>="</span><span><span class="hljs-title">php</span></span><span>">
// Run periodically to clean up idle threads
$</span><span><span class="hljs-title">result</span></span><span> = $</span><span><span class="hljs-title">mysqli</span></span><span>-></span><span><span class="hljs-title">query</span></span><span>("</span><span><span class="hljs-title">SHOW</span></span><span> </span><span><span class="hljs-title">PROCESSLIST</span></span><span>");
</span><span><span class="hljs-title">while</span></span> ($</span><span><span class="hljs-title">row</span></span> = $</span><span><span class="hljs-title">result</span></span>-></span><span><span class="hljs-title">fetch_assoc</span></span>()) {
    </span><span><span class="hljs-keyword">if</span></span> (</span><span><span class="hljs-variable">$row</span></span>[</span><span><span class="hljs-string">&#039;Command&#039;</span></span>] === </span><span><span class="hljs-string">&#039;Sleep&#039;</span></span> && </span><span><span class="hljs-variable">$row</span></span>[</span><span><span class="hljs-string">&#039;Time&#039;</span></span>] > </span><span><span class="hljs-number">300</span></span>) { </span><span><span class="hljs-comment">// No activity for 5 minutes</span></span>
        </span><span><span class="hljs-variable">$mysqli</span></span>-></span><span><span class="hljs-title function_ invoke__">kill</span></span>(</span><span><span class="hljs-variable">$row</span></span>[</span><span><span class="hljs-string">&#039;Id&#039;</span></span>]);
        </span><span><span class="hljs-keyword">echo</span></span> "Killed idle connection thread id: {$row[&#039;Id&#039;]}\n";
    }
}

3. Forcibly Disconnecting User Connections

In some admin panels, administrators may want to forcefully terminate a user’s database connection (for example, when an account is locked). This can be done by locating the user’s thread ID and calling the kill method.

<span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span>="</span><span><span class="hljs-title">php</span></span><span>">
// Query specific user connection
$</span><span><span class="hljs-title">username</span></span> = &#039;</span><span><span class="hljs-title">some_user</span></span>&#039;;
$</span><span><span class="hljs-title">result</span></span> = $</span><span><span class="hljs-title">mysqli</span></span>-></span><span><span class="hljs-title">query</span></span>("</span><span><span class="hljs-title">SHOW</span></span> </span><span><span class="hljs-title">PROCESSLIST</span></span>");
</span><span><span class="hljs-title">while</span></span> ($</span><span><span class="hljs-title">row</span></span> = $</span><span><span class="hljs-title">result</span></span>-></span><span><span class="hljs-title">fetch_assoc</span></span>()) {
    </span><span><span class="hljs-keyword">if</span></span> (</span><span><span class="hljs-variable">$row</span></span>[</span><span><span class="hljs-string">&#039;User&#039;</span></span>] === </span><span><span class="hljs-variable">$username</span></span>) {
        </span><span><span class="hljs-variable">$mysqli</span></span>-></span><span><span class="hljs-title function_ invoke__">kill</span></span>(</span><span><span class="hljs-variable">$row</span></span>[</span><span><span class="hljs-string">&#039;Id&#039;</span></span>]);
        </span><span><span class="hljs-keyword">echo</span></span> "Killed user {$username}&#039;s connection with thread id: {$row[&#039;Id&#039;]}\n";
    }
}

Conclusion

With mysqli::kill, developers can flexibly and gracefully manage database connections—terminating long-running queries, cleaning up invalid sessions, and implementing forced disconnections for administrative needs. This approach offers finer control than simply closing a connection, helping maximize database and application stability and performance.